Esecuzione di chdir prima di avviare il servizio systemd


148

Domanda: Posso dare il via a un processo con systemd e assegnare a quel processo una directory di lavoro di mia scelta?

Ho un servizio con cui voglio iniziare systemd. Quando viene avviato quel servizio, voglio essere in grado di assegnargli una directory di lavoro corrente. So come farlo se stavo usando init, ma ho problemi con systemd.

Ecco cosa sto cercando di far funzionare.

Il mio servizio

Ho creato una semplice utility ("listdir"), scritta in Python e inserita in /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

Il mio file di configurazione

Ho quindi creato un listdir.servicefile systemde lo ho inserito qui /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

Problema

Quando eseguo il systemctl start listdirmio registro di sistema registra la directory principale ("/") come directory di lavoro corrente. Certo, mi aspettavo /usr/localcome directory corrente, poiché pensavo che ExecStartPreavrebbe cambiato directory prima di iniziare il processo.

Ovviamente, sto immaginando che systemdfunzionerebbe qualcosa di simile a uno script di shell (anche se so che non è uno script di shell). Qualcuno può darmi un'idea di cosa dovrei fare? È anche possibile impostare una directory di lavoro utilizzando systemd? Grazie!


Modifica: il mio registro di sistema riporta un errore. (Ho appena notato.)

Executable path is not absolute, ignoring: chdir /usr/local 

Quindi, chdirè un comando shell e non un eseguibile stesso. Va bene. Ma c'è ancora un modo per me di cambiare directory usando systemd?

Risposte:


271

Su systemd> = 227 dovresti essere in grado di usare:

[Service]
WorkingDirectory=/usr/local

per far eseguire il tuo script lì.

( DOCS )


4
Come hai trovato questo? Non è menzionato da nessuna parte nella documentazione !
jameshfisher,


3
@EricRenouf aha, dovrebbero semplicemente duplicare quelle opzioni condivise nella documentazione di servizio
jameshfisher,

3
Quindi, solo per chiarezza, questo andrebbe nella [Service]sezione?
dthor

4
Rispondendo a me stesso, ha funzionato sull'ultimo CentOS 7, nonostante la versione.
BrunoJCM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.