systemdサービスに複数の引数を与えることは可能ですか?
最終的なユーザーが決定する必要がある複数の引数を使用してプログラムを実行したいと思います。
例えば: ./program arg1 arg2
それを単一の引数アプリとして起動するsystemctl start arg1@program
には、サービス定義のどこにあるのかが必要ですExecStart = /usr/bin/program ℅i
。
ありがとう!
systemdサービスに複数の引数を与えることは可能ですか?
最終的なユーザーが決定する必要がある複数の引数を使用してプログラムを実行したいと思います。
例えば: ./program arg1 arg2
それを単一の引数アプリとして起動するsystemctl start arg1@program
には、サービス定義のどこにあるのかが必要ですExecStart = /usr/bin/program ℅i
。
ありがとう!
回答:
はい、できます!それらをどこかのファイルで定義し、EnvironmentFile
systemdサービスに追加します。たとえば、/ etc / .progconfの内容は次のとおりです。
ARG1=-o
ARG2=--verbose
.serviceファイル:
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
外出先で変更する必要がある場合は、そのファイルに書き込むことができます。サービスはそのオプションを頻繁に変更すべきではありません。それを達成する必要がある場合は、自動起動またはcronを検討してください。
その他の例については、https://wiki.archlinux.org/index.php/Systemd/Servicesを確認してください。
VAR1=... VAR2=... systemctl start foobar.service
を渡すように言うことができますか?
PassEnvironment
ディレクティブがありますが、systemd
プロセスから変数を取得します(通常はPID 1)systemctl
。systemctl
プロセスからの環境変数は、開始されているサービスに伝播されません。
同じことをしたかったのですが、引数の組み合わせごとに個別のファイルはありませんでした。スペースを含む1つの長い引数を渡してから、systemdの環境変数のスペース分割機能を使用して引数を分離できることがわかりました。
ファイル名を使用してサービスを作成しましたargtest@.service
(サービスが引数を取るときに必要な末尾の「アットマーク」に注意してください)。
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
私はこれを実行sudo systemctl start argtest@"arg1 arg2 arg3".service
し、それが通過しarg1
、arg2
そしてarg3
test.py.に別々のコマンドライン引数として
Wants=argtest@"arg1 arg2".service
、最初の引数のみが渡されました。