동일한 시스템 스크립트를 순차적으로 여러 번 실행하여 매번 동일한 환경을 제공하는 방법입니다. 가변적이지만 값이 다른가요? 터미널에서 동적으로 변수를 제공하고 싶습니다.
어떤 방법이 있나요?
답변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].