Виконання chdir перед запуском системної служби


148

Запитання: Чи можу я розпочати процес із 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?

Відповіді:


270

У systemd> = 227 ви повинні мати можливість використовувати:

[Service]
WorkingDirectory=/usr/local

щоб ваш сценарій був виконаний там.

( DOCS )


4
Як ти це знайшов? Це ніде в документації не згадується !
jameshfisher


3
@EricRenouf ага, вони повинні просто дублювати ці спільні параметри в службовій документації
jameshfisher

3
Тож, для наочності, чи піде це в [Service]розділі?
Дтор

4
Відповідаючи на себе, він працював на останньому CentOS 7, незважаючи на версію.
BrunoJCM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.