はい、できます!それらをどこかのファイルで定義し、 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 を確認してください。
同じことをしたかったのですが、引数の組み合わせごとに個別のファイルを用意しませんでした。スペースを含む 1 つの長い引数を渡してから、systemd の環境変数のスペース分割機能を使用して引数を区切ることができることがわかりました。
ファイル名 [email protected]
のサービスを作成しました (サービスが引数を取るときに必要な末尾の「アットマーク」に注意してください ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
これを sudo systemctl start [email protected]"arg1 arg2 arg3".service
で実行します arg1
を渡します 、 arg2
および arg3
test.py への個別のコマンドライン引数として。
私が見つけた最も簡単なものは次のとおりです:
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
このパターンでも引数として機能します。