同じシステムスクリプトを順番に複数回実行して、毎回同じ環境を提供する方法です。可変ですが、値が異なりますか?端末で動的に変数を提供したいと思います。
どのような方法がありますか?
答え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].