我有几个服务(静态站点生成器),我想从同一个 systemd 计时器定期触发它们。我找到了这个问题/答案,它准确地涵盖了我想要做的事情,并描述了一个设置,其中多个服务的.target
文件Wants=
由相应的计时器触发。这听起来不错,但我发现当我实际设置它时,它只会触发一次,然后自行禁用!
我准备了一个最小的工作示例(这不会触发多个服务,但演示了相同的问题):
\ntest-timer.timer
:
[Unit]\nDescription=A test timer\n\n[Timer]\nOnCalendar=*-*-* *:*:30\nUnit=test-timer.target\n\n[Install]\nWantedBy=timers.target\n
Run Code Online (Sandbox Code Playgroud)\ntest-timer.target
:
[Unit]\nDescription=Target unit\nWants=test-timer.service\nAfter=test-timer.service\n\n[Install]\nWantedBy=timers.target\n
Run Code Online (Sandbox Code Playgroud)\ntest-timer.service
:
[Unit]\nDescription=Run test\n\n[Service]\nExecStart=/usr/bin/bash -c "date --rfc-3339=\'seconds\' >> /tmp/test-timer-output"\n\n[Install]\nAlso=test-timer.target\n
Run Code Online (Sandbox Code Playgroud)\n启用定时器:
\n$ sudo cp test-timer.* /etc/systemd/system/\n$ sudo systemctl enable --now test-timer.timer\nCreated symlink /etc/systemd/system/timers.target.wants/test-timer.timer \xe2\x86\x92 /etc/systemd/system/test-timer.timer.\n
Run Code Online (Sandbox Code Playgroud)\nsystemctl list-timers --all
然后,当我在第一次运行之前查看 的输出时,我得到(忽略其他计时器):
NEXT LEFT LAST PASSED UNIT ACTIVATES\nFri 2021-10-08 10:38:30 EDT 21s left n/a n/a test-timer.timer test-timer.target\n
Run Code Online (Sandbox Code Playgroud)\n第一次运行后,NEXT …