Wykonywanie programu chdir przed uruchomieniem usługi systemd


148

Pytanie: Czy mogę rozpocząć proces za pomocą systemd i przypisać temu procesowi wybrany przeze mnie katalog roboczy?

Mam usługę, od której chcę zacząć systemd. Kiedy ta usługa jest uruchamiana, chcę mieć możliwość przypisania jej bieżącego katalogu roboczego. Wiem, jak to zrobić, jeśli korzystałem init, ale mam z tym problem systemd.

Oto, co próbowałem zacząć działać.

Moja usługa

Stworzyłem proste narzędzie („listdir”), napisane w Pythonie i umieszczone w /opt/bin/listdir:

#! /usr/bin/python

import os

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

Mój plik konfiguracyjny

Następnie utworzyłem listdir.serviceplik systemdi umieściłem go tutaj /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

Problem

Po uruchomieniu systemctl start listdirmój dziennik systemowy zapisuje katalog główny („/”) jako bieżący katalog roboczy. Oczywiście spodziewałem się /usr/localjako bieżącego katalogu, ponieważ myślałem, ExecStartPreże zmieni katalogi przed rozpoczęciem procesu.

Oczywiście, wyobrażam sobie, systemdże działałoby to jak skrypt powłoki (chociaż wiem, że to nie jest skrypt powłoki). Czy ktoś może mi powiedzieć, co powinienem robić? Czy można w ogóle ustawić katalog roboczy za pomocą systemd? Dzięki!


Edycja: Mój dziennik systemowy zgłasza błąd. (Właśnie zauważyłem.)

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

Jest więc chdirpoleceniem powłoki, a nie samym plikiem wykonywalnym. W porządku. Ale czy jest jeszcze jakiś sposób na zmianę katalogów za pomocą systemd?

Odpowiedzi:


270

W systemied> = 227 powinieneś być w stanie użyć:

[Service]
WorkingDirectory=/usr/local

aby skrypt mógł się tam uruchomić.

( DOCS )


4
Jak to znalazłeś? Nigdzie nie wspomniano w dokumentacji !
jameshfisher

2
@ jameshfisher znajduje się w tej części dokumentacji
Eric Renouf,

3
@EricRenouf aha, powinni po prostu zduplikować te wspólne opcje w dokumentacji serwisowej
jameshfisher 18.10.16

3
Więc dla jasności, czy to pójdzie w tej [Service]części?
dthor

4
Odpowiadając sobie, działał na najnowszym CentOS 7, pomimo wersji.
BrunoJCM,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.