如何让 systemd 计时器脱离 n/a 状态?

jww*_*jww 6 linux timer systemd

我正在尝试设置一个 systemd 计时器,使其在一个工作周内每天运行两次。一次是在早上 7:00,一次是在下午 1:00。*.timer 和 *.service 文件如下。

我安装并启用它们,一切正常:

cp callboot-update.service /etc/systemd/system
cp callboot-update.timer /etc/systemd/system

if ! systemctl enable callboot-update.service; then
    echo "Failed to enable callboot-update.service"
    exit 1
fi

if ! systemctl enable callboot-update.timer; then
    echo "Failed to enable callboot-update.timer"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

并重新加载守护进程。再次一切正常:

if ! systemctl daemon-reload; then
    echo "Failed to daemon-reload"
fi

if ! systemctl reset-failed; then
    echo "Failed to reset-failed"
fi
Run Code Online (Sandbox Code Playgroud)

但是,检查状态显示计时器处于 n/a 状态,并且未计划运行:

$ systemctl list-timers --all

NEXT                         LEFT        LAST                         PASSED        UNIT                         ACTIVATES
Wed 2019-12-25 03:02:08 EST  6h left     Tue 2019-12-24 03:02:05 EST  17h ago       system-update.timer          system-update.service
Wed 2019-12-25 04:02:07 EST  7h left     Tue 2019-12-24 04:09:05 EST  16h ago       auto-update.timer            auto-update.service
Wed 2019-12-25 06:46:46 EST  9h left     Tue 2019-12-24 06:39:05 EST  14h ago       apt-daily-upgrade.timer      apt-daily-upgrade.service
Wed 2019-12-25 06:50:27 EST  9h left     Tue 2019-12-24 18:30:05 EST  2h 23min ago  apt-daily.timer              apt-daily.service
Wed 2019-12-25 10:55:43 EST  14h left    Tue 2019-12-24 13:22:24 EST  7h ago        motd-news.timer              motd-news.service
Wed 2019-12-25 16:46:06 EST  19h left    Tue 2019-12-24 16:46:06 EST  4h 7min ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2019-12-30 00:00:00 EST  5 days left Mon 2019-12-23 00:00:11 EST  1 day 20h ago fstrim.timer                 fstrim.service
n/a                          n/a         n/a                          n/a           callboot-update.timer        callboot-update.service
Run Code Online (Sandbox Code Playgroud)

如何让计时器退出 n/a 状态,使其按预期开始运行?


cp callboot-update.service /etc/systemd/system
cp callboot-update.timer /etc/systemd/system

if ! systemctl enable callboot-update.service; then
    echo "Failed to enable callboot-update.service"
    exit 1
fi

if ! systemctl enable callboot-update.timer; then
    echo "Failed to enable callboot-update.timer"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)
if ! systemctl daemon-reload; then
    echo "Failed to daemon-reload"
fi

if ! systemctl reset-failed; then
    echo "Failed to reset-failed"
fi
Run Code Online (Sandbox Code Playgroud)
$ systemctl list-timers --all

NEXT                         LEFT        LAST                         PASSED        UNIT                         ACTIVATES
Wed 2019-12-25 03:02:08 EST  6h left     Tue 2019-12-24 03:02:05 EST  17h ago       system-update.timer          system-update.service
Wed 2019-12-25 04:02:07 EST  7h left     Tue 2019-12-24 04:09:05 EST  16h ago       auto-update.timer            auto-update.service
Wed 2019-12-25 06:46:46 EST  9h left     Tue 2019-12-24 06:39:05 EST  14h ago       apt-daily-upgrade.timer      apt-daily-upgrade.service
Wed 2019-12-25 06:50:27 EST  9h left     Tue 2019-12-24 18:30:05 EST  2h 23min ago  apt-daily.timer              apt-daily.service
Wed 2019-12-25 10:55:43 EST  14h left    Tue 2019-12-24 13:22:24 EST  7h ago        motd-news.timer              motd-news.service
Wed 2019-12-25 16:46:06 EST  19h left    Tue 2019-12-24 16:46:06 EST  4h 7min ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2019-12-30 00:00:00 EST  5 days left Mon 2019-12-23 00:00:11 EST  1 day 20h ago fstrim.timer                 fstrim.service
n/a                          n/a         n/a                          n/a           callboot-update.timer        callboot-update.service
Run Code Online (Sandbox Code Playgroud)

use*_*686 6

您必须启动.timer 单元才能对其进行调度——就像您必须启动 .service 单元以使相关的守护进程运行一样。您的帖子既systemctl start没有显示,也systemctl enable --now没有显示,也没有显示任何其他将启动作业排队的命令。

systemctl daemon-reload 不会为已经在运行的单元自动启动任何新添加的依赖项(例如在这种情况下的 timers.target)——“systemctl enable”创建的符号链接只会在下次启动时才真正生效,或者如果您以某种方式手动重新启动计时器。目标。

  • 对我来说,“systemctl restart xyz.timer”就成功了。无需重新启动。 (9认同)