Вопрос: Могу ли я запустить процесс с помощью systemd и назначить этому процессу выбранный мной рабочий каталог?
У меня есть сервис, с которого я хочу начать systemd
. Когда эта служба запускается, я хочу иметь возможность назначить ей текущий рабочий каталог. Я знаю, как это сделать, если я использовал init
, но у меня проблемы с systemd
.
Вот то, что я пытался заставить работать.
Мой сервис
Я создал простую утилиту ("listdir"), написанную на Python и помещенную в /opt/bin/listdir
:
#! /usr/bin/python
import os
print 'Current working directory: %s' % (os.getcwd())
Мой файл конфигурации
Затем я создал listdir.service
файл systemd
и поместил его здесь /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
проблема
Когда я запускаю systemctl start listdir
системный журнал, в качестве текущего рабочего каталога записывается корневой каталог ("/"). Конечно, я ожидал /usr/local
в качестве текущего каталога, так как думал, ExecStartPre
что изменит каталоги до начала процесса.
Очевидно, я представляю, что это systemd
будет работать как сценарий оболочки (хотя я знаю, что это не сценарий оболочки). Может ли кто-нибудь дать мне представление о том, что я должен делать? Можно ли даже установить рабочий каталог с помощью systemd
? Спасибо!
Изменить: мой системный журнал сообщает об ошибке. (Я только что заметил.)
Executable path is not absolute, ignoring: chdir /usr/local
Итак, chdir
это команда оболочки, а не сам исполняемый файл. Хорошо. Но есть ли еще способ изменить каталоги с помощью systemd
?