![运行相同的 systemd 脚本,向其传递相同的环境变量但具有不同的值?](https://linux22.com/image/210022/%E8%BF%90%E8%A1%8C%E7%9B%B8%E5%90%8C%E7%9A%84%20systemd%20%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%90%91%E5%85%B6%E4%BC%A0%E9%80%92%E7%9B%B8%E5%90%8C%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E4%BD%86%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%E5%80%BC%EF%BC%9F.png)
如何按顺序多次运行相同的 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].