未指定时间的 systemd 计时器 运行
systemd timer running at unspecified time
我正在 运行宁 sync.timer
和 sync.service
单元文件 systemd 245 (245.4-4ubuntu3.13)
。该服务 运行 是一个简单的 curl 脚本 (/bin/sync.sh
),并通过计时器安排在美国东部时间凌晨 1 点至凌晨 3 点之间的某个时间 运行 运行。
最近几天设置如下:
# sync.service
[Unit]
Description=Run sync
Requires=another.service
[Service]
TimeoutStartSec=1200
Type=oneshot
ExecStart=/bin/sync.sh
User=auto
RemainAfterExit=yes
# sync.timer
[Unit]
Description=Run sync daily between 1am - 3am EST
[Timer]
OnCalendar=*-*-* 01:00:00 America/New_York
Unit=sync.service
RandomizedDelaySec=2hr
[Install]
WantedBy=timers.target
当我最初创建这些单元文件时,它 运行 在 07:45:14 UTC(美国东部标准时间上午 02:45) 如预期的那样。但是,从第 2 天开始,该服务就以某种方式 运行ning 在 00:02:xx UTC 而不是指定的时间范围(请注意计时器的 LAST
在 06:42:14 UTC
(01:42 AM EST
) 是正确的,但是服务单位的 journalctl
在 00:02:26 UTC
说 运行最新的运行)
# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
...
n/a n/a Tue 2021-11-16 06:42:14 UTC 17h ago sync.timer sync.service
# journalctl -u sync.service
-- Logs begin at Thu 2021-11-11 21:02:16 UTC, end at Wed 2021-11-17 00:06:30 UTC. --
Nov 13 07:45:14 host-16core systemd[1]: Starting sync
...
Nov 16 00:02:26 host-16core systemd[1]: Starting sync
...
Nov 17 00:02:03 host-16core systemd[1]: Starting sync
# timer status
sync.timer - Run sync daily between 1am - 3am EST
Loaded: loaded (/etc/systemd/system/sync.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2021-11-12 18:20:23 UTC; 4 days ago
Trigger: n/a
Triggers: ● sync.service
Nov 12 18:20:23 host-16core systemd[1]: Started Run sync daily between 1am - 3am EST.
# service status
● sync.service - Run sync
Loaded: loaded (/etc/systemd/system/sync.service; static; vendor preset: enabled)
Active: active (exited) since Wed 2021-11-17 00:02:04 UTC; 15min ago
TriggeredBy: ● sync.timer
Process: 440319 ExecStart=/bin/sync.sh (code=exited, status=0/SUCCESS)
Main PID: 440319 (code=exited, status=0/SUCCESS)
Nov 17 00:02:03 host-16core systemd[1]: Starting Run sync
我有几个问题:
- 为什么
ACTIVATE
和 LEFT
列的值是 n/a
,而计时器仍按计划 运行 秒?
- 为什么同步服务日志的时间戳(UTC 上午 00:02)与计时器的
LAST
列(UTC 上午 06:42)不匹配?
- 为什么同步服务 运行 在世界标准时间凌晨 2 点重复?
编辑:将定时器的配置更新为以下但仍然看到相同的行为:
[Timer]
OnCalendar=
OnCalendar=*-*-* 06:00:00
Unit=sync.service
RandomizedDelaySec=7200
- 如果目标服务仍然是 运行,计时器将
n/a
触发。在这种情况下 sync.service
有 RemainAfterExit=yes
设置,所以当它完成 运行 时它仍然是 active (exited)
。删除此设置将确保服务将以 inactive (dead)
状态退出并允许计时器重新启动它
- 查看答案#3
- 我们有一个单独的脚本在午夜重新启动
another.service
(sync.service
的依赖项)。这也触发了 sync.service
重新启动
我正在 运行宁 sync.timer
和 sync.service
单元文件 systemd 245 (245.4-4ubuntu3.13)
。该服务 运行 是一个简单的 curl 脚本 (/bin/sync.sh
),并通过计时器安排在美国东部时间凌晨 1 点至凌晨 3 点之间的某个时间 运行 运行。
最近几天设置如下:
# sync.service
[Unit]
Description=Run sync
Requires=another.service
[Service]
TimeoutStartSec=1200
Type=oneshot
ExecStart=/bin/sync.sh
User=auto
RemainAfterExit=yes
# sync.timer
[Unit]
Description=Run sync daily between 1am - 3am EST
[Timer]
OnCalendar=*-*-* 01:00:00 America/New_York
Unit=sync.service
RandomizedDelaySec=2hr
[Install]
WantedBy=timers.target
当我最初创建这些单元文件时,它 运行 在 07:45:14 UTC(美国东部标准时间上午 02:45) 如预期的那样。但是,从第 2 天开始,该服务就以某种方式 运行ning 在 00:02:xx UTC 而不是指定的时间范围(请注意计时器的 LAST
在 06:42:14 UTC
(01:42 AM EST
) 是正确的,但是服务单位的 journalctl
在 00:02:26 UTC
说 运行最新的运行)
# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
...
n/a n/a Tue 2021-11-16 06:42:14 UTC 17h ago sync.timer sync.service
# journalctl -u sync.service
-- Logs begin at Thu 2021-11-11 21:02:16 UTC, end at Wed 2021-11-17 00:06:30 UTC. --
Nov 13 07:45:14 host-16core systemd[1]: Starting sync
...
Nov 16 00:02:26 host-16core systemd[1]: Starting sync
...
Nov 17 00:02:03 host-16core systemd[1]: Starting sync
# timer status
sync.timer - Run sync daily between 1am - 3am EST
Loaded: loaded (/etc/systemd/system/sync.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2021-11-12 18:20:23 UTC; 4 days ago
Trigger: n/a
Triggers: ● sync.service
Nov 12 18:20:23 host-16core systemd[1]: Started Run sync daily between 1am - 3am EST.
# service status
● sync.service - Run sync
Loaded: loaded (/etc/systemd/system/sync.service; static; vendor preset: enabled)
Active: active (exited) since Wed 2021-11-17 00:02:04 UTC; 15min ago
TriggeredBy: ● sync.timer
Process: 440319 ExecStart=/bin/sync.sh (code=exited, status=0/SUCCESS)
Main PID: 440319 (code=exited, status=0/SUCCESS)
Nov 17 00:02:03 host-16core systemd[1]: Starting Run sync
我有几个问题:
- 为什么
ACTIVATE
和LEFT
列的值是n/a
,而计时器仍按计划 运行 秒? - 为什么同步服务日志的时间戳(UTC 上午 00:02)与计时器的
LAST
列(UTC 上午 06:42)不匹配? - 为什么同步服务 运行 在世界标准时间凌晨 2 点重复?
编辑:将定时器的配置更新为以下但仍然看到相同的行为:
[Timer]
OnCalendar=
OnCalendar=*-*-* 06:00:00
Unit=sync.service
RandomizedDelaySec=7200
- 如果目标服务仍然是 运行,计时器将
n/a
触发。在这种情况下sync.service
有RemainAfterExit=yes
设置,所以当它完成 运行 时它仍然是active (exited)
。删除此设置将确保服务将以inactive (dead)
状态退出并允许计时器重新启动它 - 查看答案#3
- 我们有一个单独的脚本在午夜重新启动
another.service
(sync.service
的依赖项)。这也触发了sync.service
重新启动