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


148

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

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

これが私が仕事をしようとしてきたことです。

私のサービス

Pythonで記述された単純なユーティリティ( "listdir")を作成し、次の場所に配置しました/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

2
それは中だ@jameshfisher ドキュメントのこの部分
エリックRenouf

3
@EricRenouf aha、サービスドキュメントの共有オプションを複製する必要があります
-jameshfisher

3
それで、明確にするために、これは[Service]セクションに行きますか?
dthor

4
自分自身に答えると、バージョンに関わらず最新のCentOS 7で動作しました。
ブルーノJCM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.