web-dev-qa-db-fra.com

Exécuter chdir avant de démarrer le service systemd

Question: Puis-je lancer un processus avec systemd et attribuer à ce processus un répertoire de travail de mon choix?

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.

Mon service

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())

Mon fichier de configuration

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

Problème

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?

155
Mario

Sur systemd> = 227, vous devriez pouvoir utiliser:

[Service]
WorkingDirectory=/usr/local

pour y faire exécuter votre script.

( DOCUMENTS )

289
Eric Renouf