私のsystemdサービスに複数の引数を与えることは可能ですか?
最終的にユーザーが決めなければならない複数の引数を持つプログラムを実行したいと思います
例./program arg1 arg2
単一引数のアプリを起動するには、systemctl start arg1@program
のようなものが必要ですが、サービス定義にはExecStart = /usr/bin/program ℅i
があります
Thanks!
54 peperunas 2014-03-14
はい、できます。どこかのファイルで定義して、systemd Service の EnvironmentFile
に追加してください。例えば、/etc/.progconf の内容が以下のようになっているとします
ARG1=-o
ARG2=--verbose
.サービスファイルも
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
外出先で変更する必要がある場合は、そのファイルに書き込むことができます。サービスはあまり頻繁にオプションを変更するべきではありませんが、それを達成する必要がある場合は自動起動やcronを検討してください
より多くの例については、チェックしてください。https://wiki.archlinux.org/index.php/Systemd/Services
45 alexm 2014-03-14
同じことをしたかったのですが、引数の組み合わせごとに別のファイルを用意する必要はありませんでした。1つの長い引数をスペースで渡して、systemdの環境変数のスペース分割機能を使って引数を分離することができることがわかりました
ファイル名が argtest@.service
のサービスを作ってみました (サービスが引数を取るときに必要な最後の ‘at sign’ に注意してください)
[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に渡します
25 nonagon 2018-01-03
私が見つけた中で一番簡単なのは
ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""
全てを自分のものにしておく
それを言ったことで、私は少なくともUbuntu 18.04 LTSでは、私もそれを行う必要はありませんが、私はこれを行うことができ、それは正常に動作することを発見しました
ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"
$vars
はこのパターンでも引数として動作します
2 jjxtra 2019-08-15
systemctl の edit
オプションを使ってドロップインスニペットを作成し、サービスをオーバーライドするようにユーザーに伝えます
まず、いくつかのまともなデフォルトから始めましょう。サービスのExecStart
部分が以下のように宣言しているとします
[Service]
ExecStart=./program arg1
これで、このサービスのユーザは誰でも、プログラムを実行するために異なる引数のセットを使用することができるようになりました。これはドロップインスニペットを作成することで実現できます
systemctl edit myservice.service
新しいファイルでは、ExecStart
を上書きするために以下のように書くだけだそうです
[Service]
ExecStart=
ExecStart=./program arg1 arg2
この方法の利点は、パッケージマネージャによっては競合する可能性のあるシステムにインストールされたサービスを変更する必要がないことです
そして、それはそれ!
あとは、systemd (systemctl daemon-reload
) をリロードして、サービス (systemctl restart myservice.service
) を再起動するだけです
サービスの再起動時には、必ずユーザーの修正内容も読み込まれます
お役に立てれば幸いです
Sources:
- https://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services
- https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service
0 smac89 2020-03-21