我如何知道 systemd-timers 服务正在运行哪个进程?

我如何知道 systemd-timers 服务正在运行哪个进程?

我正在尝试确定计划为 systemd-timers 服务的服务的进程是否成功运行。我有一个名为 的预定服务certbot.service,我可以看到它正在使用systemctl list-timers。该服务的定义在哪里?如何确定该服务最终触发的流程?

答案1

当您使用时,systemctl list-timers您会列出活动*.timer单位。

例子:

stew ~ $ systemctl list-timers
NEXT                         LEFT          LAST                         PASSED       UNIT                         ACTIVATES
Wed 2021-09-08 10:32:20 CEST 46min left    Wed 2021-09-08 09:32:47 CEST 13min ago    anacron.timer                anacron.service
Wed 2021-09-08 10:58:47 CEST 1h 12min left Wed 2021-09-08 04:35:18 CEST 5h 10min ago apt-daily.timer              apt-daily.service
Wed 2021-09-08 13:28:09 CEST 3h 41min left Tue 2021-09-07 13:28:09 CEST 20h ago      systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Wed 2021-09-08 15:40:34 CEST 5h 54min left Wed 2021-09-08 05:01:01 CEST 4h 45min ago fwupd-refresh.timer          fwupd-refresh.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       atop-rotate.timer            atop-rotate.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       exim4-base.timer             exim4-base.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       logrotate.timer              logrotate.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       man-db.timer                 man-db.service
Thu 2021-09-09 06:20:05 CEST 20h left      Wed 2021-09-08 06:01:22 CEST 3h 44min ago apt-daily-upgrade.timer      apt-daily-upgrade.service
Sun 2021-09-12 03:10:53 CEST 3 days left   Sun 2021-09-05 03:10:52 CEST 3 days ago   e2scrub_all.timer            e2scrub_all.service

10 timers listed.
Pass --all to see loaded but inactive timers, too.

您可以看到在UNIT列中我们有计时器单位(例如anacron.timer)这是您列出的实际计时器。当计时器触发时,它将激活另一个单位。该单元可以在*.timer文件中指定为Unit=anacron.service或默认为与计时器同名但具有.service扩展名的服务。本ACTIVATES专栏向您展示了这一点。

如果您想知道在哪里*.timer设置,请使用systemctl cat <unit>

stew ~ $ systemctl cat anacron.timer
# /lib/systemd/system/anacron.timer
[Unit]
Description=Trigger anacron every hour

[Timer]
OnCalendar=*-*-* 07..23:30
RandomizedDelaySec=5m
Persistent=true

[Install]
WantedBy=timers.target

这里特别有用的是它告诉您文件的名称。如果您有任何来访,它们将被列出。

就您而言,您对由您的服务触发的流程特别感兴趣。 systemctl cat <unit>也可以帮助你。如果我继续anacron.service你会得到:

stew ~ $ systemctl cat anacron.service
# /lib/systemd/system/anacron.service
...

[Service]
EnvironmentFile=/etc/default/anacron
ExecStart=/usr/sbin/anacron -d -q $ANACRON_ARGS
...

您可以看到该ExecStart=行显示了启动服务所运行的命令。

如果您对当前状态感兴趣,还可以使用以下命令查看systemctl status <unit>

stew ~ $ systemctl status anacron.service
● anacron.service - Run anacron jobs
...
     Active: inactive (dead) since Wed 2021-09-08 09:32:47 CEST; 23min ago
TriggeredBy: ● anacron.timer
    Process: 480643 ExecStart=/usr/sbin/anacron -d -q $ANACRON_ARGS (code=exited, status=0/SUCCESS)
   Main PID: 480643 (code=exited, status=0/SUCCESS)
...

您可以看到服务上次完成的时间、ExecStart=使用的命令、PID 和退出代码。

相关内容