无法启动 Systemd 计时器

无法启动 Systemd 计时器

我有以下 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 后,它可以正常工作。该存储库中提供的基本更新说明如下:

安装说明

  1. 确保在更新之前编辑 /etc/selinux/config 并将 SELinux 置于许可状态,否则您的系统将无法启动!
  2. # 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
  3. # yum update systemd
  4. 重启。

相关内容