我有以下 systemd 计时器配置
[Unit]
Description=Timer for Service
[Timer]
Unit=service-unit.service
OnCalendar=Mon..Fri *-*-* 13..23:0,15,30,45:00
# *-*-* means every day and 10:00:00 is the time of day (UTC)
[Install]
WantedBy=timers.target
当尝试启动计时器时,我收到以下错误消息:
Failed to parse calendar specification, ignoring: Mon..Fri *-*-* 13..23...5,30,45:00 service-timer.timer lacks value setting. Refusing.
我尝试检查时间戳,systemd-analyze calendar "Mon..Fri *-*-* 13..23:5,30,45:00"
但我的版本似乎没有此选项。它返回Unknown operation 'calendar'.
当尝试在日历选项可用的不同服务器上时,它似乎是有效的时间戳。
$ sudo systemd-analyze calendar "Mon..Fri *-*-* 13..23:0,15,30,45:00"
Original form: Mon..Fri *-*-* 13..23:0,15,30,45:00
Normalized form: Mon..Fri *-*-* 13..23:00,15,30,45:00
Next elapse: Thu 2020-09-10 14:00:00 EDT
(in UTC): Thu 2020-09-10 18:00:00 UTC
From now: 1min 21s left
它不工作的服务器是 CentOS 7,它工作的服务器是 Ubuntu 18.04 Minimal。
答案1
CentOS 7 上可用的 systemd 版本不支持使用..
.13..23
可以表示为13/1
(从13点开始,然后每小时),但我认为Mon..Fri
只能表示为天数列表,因此
OnCalendar=Mon..Fri *-*-* 13..23:0,15,30,45:00
变成
OnCalendar=Mon,Tue,Wed,Thu,Fri *-*-* 13/1:0,15,30,45:00
答案2
感谢所有回答的人。对我来说,最好的选择是使用我发现的 Facebook 向后移植来更新 systemd这里。这样我就可以利用更新的功能而不是使用解决方法。
从 219 更新到 231 后,它可以正常工作。该存储库中提供的基本更新说明如下:
安装说明
- 确保在更新之前编辑 /etc/selinux/config 并将 SELinux 置于许可状态,否则您的系统将无法启动!
# wget https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo
# yum update systemd
- 重启。