Systemd
在 systemd 單元中使用動態日期
我嘗試使用日期輸出作為 systemd 單元中日誌文件名的一部分。這裡的例子:
[Unit] Description=TCS minetest server unit [Service] Type=simple ExecStart=/home/tcs/minetest/bin/minetestserver --worldname world --logfile /home/tcs/logs/debug_$$(date +%%Y_%%m_%%d).txt ExecReload=/bin/kill -HUP $MAINPID User=tcs [Install] WantedBy=multi-user.target
但我得到了日誌文件:
ls /home/tcs/logs/ 'debug_$(date'
如何使用目前日期作為日誌文件名?
不直接支持這種類型的語法,如system.service 的手冊頁中所述:
這種語法是受shell語法啟發的,但只理解後面幾段描述的元字元和擴展,變數的擴展是不同的。具體來說,不支持使用 “<"、"<<"、">” 和 “>>” 的重定向、使用 “|” 的管道、使用 “&” 在後台執行程序以及其他 shell 語法元素。
“以下段落”主要包括基本的環境變數替換、路徑搜尋和一些 C 轉義。
通常,您可以通過編寫自己的 shell 腳本來設置程序,然後將該腳本指定為
ExecStart
systemd 服務的選項來繞過這些限制。在您的特定情況下,您應該能夠通過將日期替換顯式傳遞給 shell 來使其工作:
ExecStart=/bin/bash -c '/home/tcs/minetest/bin/minetestserver --worldname world --logfile /home/tcs/logs/debug_$(date +%Y_%m_%d).txt'