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.service
plik systemd
i 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 listdir
mój dziennik systemowy zapisuje katalog główny („/”) jako bieżący katalog roboczy. Oczywiście spodziewałem się /usr/local
jako 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 chdir
poleceniem powłoki, a nie samym plikiem wykonywalnym. W porządku. Ale czy jest jeszcze jakiś sposób na zmianę katalogów za pomocą systemd
?