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?