web-dev-qa-db-fra.com

Le script de service Systemd ne parvient pas à écrire dans un fichier

Je veux un service basé sur l'utilisateur. J'ai donc créé [email protected] dans /etc/systemd/system avec le contenu suivant.

[Unit]
Description=My Service

[Service]
Type=simple
ExecStart=/bin/bash ${HOME}/userscript
WorkingDirectory=${HOME}
Restart=always
RestartSec=2
User=%i

[Install]
WantedBy=multi-user.target

Voici le contenu de ${HOME}/userscript

#!/bin/bash
while true;
do
    echo $(date +%Y%m%d%a%H%M%S) >> log
    echo $USER >> log
    sleep 2
done

Ensuite, j'active et démarre le service en utilisant:

systemctl enable myservice@john
systemctl start myservice@john

Voici ce que je reçois lorsque je vérifie le statut du service:

[email protected] - myservice
   Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-12-11 08:03:54 PST; 6s ago
 Main PID: 11558 (bash)
   CGroup: /system.slice/system-myservice.slice/[email protected]
           ├─11558 /bin/bash /home/john/userscript
           └─11603 sleep 2

Dec 11 08:03:54 my-system-hostname systemd[1]: Started myservice.
Dec 11 08:03:54 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:54 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:03:56 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:56 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:03:58 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:58 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:04:00 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:04:00 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied

Le service doit écrire date-heure et nom d'utilisateur toutes les 2 secondes, mais cela n'arrivera pas et j'obtiendrai une erreur d'autorisations. J'ai confirmé que le service est exécuté en tant que john et je pourrais l'obtenir correctement echo. Un problème de permission apparaît lorsque j'essaie d'écrire dans le fichier.

Un indice?

PDATE 1

Voici la sortie de namei -lx /home/john/log

$ namei -lx /home/john/log
f: /home/john/log
Drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x john john john
-rw-rw-r-- john john log
2
arxoft

Je l'ai finalement résolu. Je devais ajouter la directive WorkingDirectory, avec la valeur ~. Cela fonctionne maintenant sans problème d'autorisations.

Merci à @muru

2
arxoft