GNU/Linux >> Linux の 問題 >  >> Linux

systemd - サービスに複数の引数を与える

はい、できます!それらをどこかのファイルで定義し、 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 このパターンでも引数として機能します。


Linux
  1. LinuxでSystemdサービスを作成する方法

  2. Linuxsystemdに新しいサービスを追加する

  3. シバンの複数の議論?

  1. SystemdサービスはNodejsを起動しませんか?

  2. systemd サービスの出力をファイルにリダイレクトする方法

  3. @reboot が CRON で機能しない

  1. systemd サービスを停止する方法

  2. 複数のexecStartを持つSystemd

  3. systemd サービス ログをファイルにリダイレクトする