systemd
で開始したいサービスがあります。そのサービスが開始されているときに、現在の作業ディレクトリに割り当てられるようにしたいと考えています。 init
を使用している場合にこれを行う方法を知っていますが、systemd
で問題が発生しています。
これが私が働き始めようとしていることです。
私はPythonで書かれたシンプルなユーティリティ( "listdir")を作成し、/opt/bin/listdir
に配置しました:
#! /usr/bin/python
import os
print 'Current working directory: %s' % (os.getcwd())
次に、systemd
のlistdir.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
を使用してディレクトリを変更する方法はまだありますか?
Systemd> = 227では、以下を使用できるはずです。
[Service]
WorkingDirectory=/usr/local
スクリプトをそこで実行します。
( [〜#〜] docs [〜#〜] )