同じシステムスクリプトを実行して、同じ環境変数を異なる値に渡しますか?

同じシステムスクリプトを実行して、同じ環境変数を異なる値に渡しますか?

同じシステムスクリプトを順番に複数回実行して、毎回同じ環境を提供する方法です。可変ですが、値が異なりますか?端末で動的に変数を提供したいと思います。

どのような方法がありますか?

答え1

Environment="%:指定子%I(または%i

man systemd.exec定義を参照してくださいEnvironment=

man systemd.unit「%」指定子の定義を参照してください。


はい

ここでは、というテンプレート単位を作成しました[email protected]。テンプレートはその名前(%I)を環境変数に渡しますHELLO。次に環境を印刷します。

私が起動するインスタンスはですWorld。ジャーナルから印刷されていることがわかりますHELLO=World

$ systemctl --user cat [email protected] 
# $HOME/.config/systemd/user/[email protected]
[Service]
Type=oneshot
Environment=HELLO=%I
ExecStart=/usr/bin/env

$ systemctl --user start [email protected]

$ journalctl --user --since "5 minutes ago" | grep HELLO
Aug 30 22:08:34 stewbian env[56312]: HELLO=World

テンプレートは1つの変数のみを渡すことができます。複数の変数が必要な場合は、テンプレートを使用して環境ファイルを渡します。

$ cat $HOME/home.env
IP=123.45.67.89
PORT=23412

$ cat $HOME/fred.env
IP=12.34.56.78
PORT=10201

$ systemctl --user cat [email protected]
# $HOME/.config/systemd/user/[email protected]
[Service]
Type=oneshot
EnvironmentFile=%h/%I.env
ExecStart=/usr/bin/env

$ systemctl start --user [email protected]
$ systemctl start --user [email protected]
$ journalctl --user --since "5 minutes ago"
...
Aug 31 08:06:54 stewbian env[3894]: IP=123.45.67.89
Aug 31 08:06:54 stewbian env[3894]: PORT=23412
Aug 31 08:06:54 stewbian systemd[1199]: Finished [email protected].
...
Aug 31 08:06:59 stewbian env[3894]: IP=12.34.45.78
Aug 31 08:06:59 stewbian env[3894]: PORT=10201
Aug 31 08:06:59 stewbian systemd[1199]: Finished [email protected].

関連情報