运行相同的 systemd 脚本,向其传递相同的环境变量但具有不同的值?

运行相同的 systemd 脚本,向其传递相同的环境变量但具有不同的值?

如何按顺序多次运行相同的 systemd 脚本,每次提供相同的环境。变量但具有不同的值?我希望在终端中动态提供一个变量。

有办法吗?

答案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

模板只能传递一个变量。如果您需要多个变量,我会使用我的模板来传递环境文件:

$ 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].

相关内容