Service

如何在 systemd 服務文件中使用變數?

  • October 15, 2018

我正在為守護程序創建一個服務文件,並且我想使用變數(在我使用環境變數的初始化腳本中)為執行的腳本定義一些參數。例如,我想使用 2 個參數 $ PARAM1 $ 參數 2:

[Unit]
Description=my daemon
After=network.target

[Service]
ExecStart=/usr/local/bin/daemon1
PIDFile=/var/run/daemon1.pid
EnvironmentVariable=PARAM1=123
EnvironmentVariable=PARAM2=444
ExecStartPre=-/usr/bin/wget -O - --post-data=key1=$PARAM1&key2=$PARAM2 http://192.168.1.2/log.php
ExecStopPost=-/usr/bin/wget -O - --post-data=key1=$PARAM1 http://192.168.1.2/log.php
Type=simple

[Install]
WantedBy=multi-user.target

不用說,這個例子是行不通的。systemd 可以實現這樣的目標嗎?什麼樣的 exec 命令參數化是可能的?

該指令是Environment,不是EnvironmentVariable

Environment=

為執行的程序設置環境變數。採用空格分隔的變數賦值列表。可以多次指定此選項,在這種情況下,將設置所有列出的變數。如果同一個變數設置了兩次,後面的設置將覆蓋前面的設置。

Environment=PARAM1=123
Environment=PARAM2=444

或者

Environment=PARAM1=123 PARAM2=444

不確定,但您可能需要在大括號內使用它們{}

--post-data=key1=${PARAM1}&key2=${PARAM2} 

引用自:https://serverfault.com/questions/868373