J'ai un service que je veux commencer par systemd
. Lorsque ce service est démarré, je veux pouvoir lui affecter un répertoire de travail actuel. Je sais comment faire cela si j'utilisais init
, mais j'ai des problèmes avec systemd
.
Voici ce que j'ai essayé de faire.
J'ai créé un utilitaire simple ("listdir"), écrit en Python, et placé dans /opt/bin/listdir
:
#! /usr/bin/python
import os
print 'Current working directory: %s' % (os.getcwd())
J'ai ensuite créé un listdir.service
fichier pour systemd
et placé ici: /lib/systemd/system/listdir.service
:
[Unit]
Description=Test of listing CWD.
[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
Quand je lance systemctl start listdir
mon journal système enregistre le répertoire racine ("/") comme répertoire de travail actuel. Bien sûr, je m'attendais à /usr/local
comme répertoire courant, car je pensais que ExecStartPre
changerait de répertoire avant de démarrer le processus.
Évidemment, j'imagine que systemd
fonctionnerait quelque chose comme un script Shell (même si je sais que ce n'est pas un script Shell). Quelqu'un peut-il me donner une idée de ce que je dois faire? Est-il même possible de définir un répertoire de travail en utilisant systemd
? Merci!
Edit: Mon journal système signale une erreur. (Je viens de remarquer.)
Executable path is not absolute, ignoring: chdir /usr/local
Ainsi, chdir
est une commande Shell, et non un exécutable lui-même. D'accord. Mais y a-t-il encore un moyen pour moi de changer de répertoire en utilisant systemd
?
Sur systemd> = 227, vous devriez pouvoir utiliser:
[Service]
WorkingDirectory=/usr/local
pour y faire exécuter votre script.
( DOCUMENTS )