相关疑难解决方法(0)

为什么我的 systemd 计时器仅在单位成为目标时触发一次?

我有几个服务(静态站点生成器),我想从同一个 systemd 计时器定期触发它们。我找到了这个问题/答案,它准确地涵盖了我想要做的事情,并描述了一个设置,其中多个服务的.target文件Wants=由相应的计时器触发。这听起来不错,但我发现当我实际设置它时,它只会触发一次,然后自行禁用!

\n

我准备了一个最小的工作示例(这不会触发多个服务,但演示了相同的问题):

\n

test-timer.timer:

\n
[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)\n

test-timer.target:

\n
[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)\n

test-timer.service:

\n
[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)\n

systemctl list-timers --all然后,当我在第一次运行之前查看 的输出时,我得到(忽略其他计时器):

\n
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 …

systemd systemd-timers

9
推荐指数
1
解决办法
2605
查看次数

标签 统计

systemd ×1

systemd-timers ×1