Выполнение chdir перед запуском службы systemd

149

Вопрос: Могу ли я запустить процесс с помощью 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?

Марио
источник

Ответы:

272

На systemd> = 227 вы сможете использовать:

[Service]
WorkingDirectory=/usr/local

чтобы ваш скрипт выполнялся там.

( Документы )

Эрик Ренуф
источник
4
Как ты это нашел? Это нигде не упоминается в документации !
jameshfisher
2
@jameshfisher это в этой части документации
Эрик Ренуф
3
@EricRenouf ага, они должны просто продублировать эти общие параметры в сервисной документации
jameshfisher
3
Так что просто для ясности, пойдет ли это в [Service]раздел?
dthor
4
Отвечая себе, он работал на последнем CentOS 7, несмотря на версию.
BrunoJCM