如何按顺序多次运行相同的 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].