systemd サービスを開始する前に chdir を実行してください。

systemd サービスを開始する前に chdir を実行してください。

Q: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

質問

syslogを実行すると、systemctl start listdirルートディレクトリ( "/")が現在の作業ディレクトリに書き込まれます。もちろん、プロセスを開始する前にディレクトリが変更されると/usr/local仮定しているので、現在のディレクトリと見なします。ExecStartPre

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


編集する:私のシステムログにエラーが報告されます。 (ちょうど気づきました。)

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

したがって、chdir実行可能ファイル自体ではなくシェルコマンドです。わかりましたが、ディレクトリを変更するために使用できる他の方法はありますかsystemd

ベストアンサー1

systemd >= 227 では、次のものを使用できます。

[Service]
WorkingDirectory=/usr/local

そこからスクリプトを実行してみてください。

文書管理システム)

おすすめ記事