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

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

111 голосов | спросил Mario 5 Maypm15 2015, 23:08:39

1 ответ


197

В systemd> = 227 вы должны использовать:

[Service]
WorkingDirectory=/usr/local

, чтобы запустить ваш скрипт.

( DOCS )

ответил Eric Renouf 5 Maypm15 2015, 23:13:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132