web-dev-qa-db-ja.com

systemdサービスを開始する前にchdirを実行する

質問:systemdでプロセスを開始して、そのプロセスに選択した作業ディレクトリを割り当てることはできますか?

systemdで開始したいサービスがあります。そのサービスが開始されているときに、現在の作業ディレクトリに割り当てられるようにしたいと考えています。 initを使用している場合にこれを行う方法を知っていますが、systemdで問題が発生しています。

これが私が働き始めようとしていることです。

私のサービス

私はPythonで書かれたシンプルなユーティリティ( "listdir")を作成し、/opt/bin/listdirに配置しました:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

私の設定ファイル

次に、systemdlistdir.serviceファイルを作成して、ここに配置しました:/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を実行すると、システムログにルートディレクトリ( "/")が現在の作業ディレクトリとして記録されます。もちろん、ExecStartPreはプロセスを開始する前にディレクトリを変更すると思っていたので、現在のディレクトリとして/usr/localを期待していました。

明らかに、systemdがシェルスクリプトのように機能することを想像しています(それがシェルスクリプトではないことはわかっていますが)。誰かが私に何をすべきかを教えてくれますか? systemdを使用して作業ディレクトリを設定することもできますか?ありがとう!


編集:システムログにエラーが報告されています。 (さっき気付いた。)

Executable path is not absolute, ignoring: chdir /usr/local 

したがって、chdirはシェルコマンドであり、実行可能ファイル自体ではありません。はい。しかし、systemdを使用してディレクトリを変更する方法はまだありますか?

155
Mario

Systemd> = 227では、以下を使用できるはずです。

[Service]
WorkingDirectory=/usr/local

スクリプトをそこで実行します。

[〜#〜] docs [〜#〜]

289
Eric Renouf