systemctl/journal 区分服务是否重新启动、未停止和启动

systemctl/journal 区分服务是否重新启动、未停止和启动

有没有办法检查服务是否重新启动?当执行systemctl restart myunit.service或 时systemctl --user restart myunit.service,日志仅显示我的设备已停止然后再次启动。我需要捕获服务何时重新启动没有停止,然后又开始了。

另外,我不能使用停止和重新启动之间的时间作为解决方案。服务有时不会立即停止。kill -9如果服务时间超过 10 秒,则超时设置内置于服务单元中。

需要一种方法来判断用户是否快速执行了 a restart,而不是stopthen 。start

我怎样才能做到这一点?

答案1

journalctl -o verbose将包含一个JOB_TYPE设置为 的字段restart。我在 systemd 的文档中找不到该字段,但是https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_systems_using_the_rhel_8_web_console/reviewing-logs_system-management-using-the-rhel-8-web-console提到它:

过滤自 2020 年 10 月 22 日午夜以来发生的由“systemd”标识的所有日志消息,日志字段“JOB_TYPE”为“start”或“restart”。

journalctl -u irqbalance -o verbose之后的示例条目systemctl restart irqbalance

    JOB_TYPE=stop
    JOB_ID=3667
    INVOCATION_ID=14f864c9297247f286c8e7e07a09c40e
    UNIT=irqbalance.service
    MESSAGE=Stopping irqbalance daemon...
Mon 2022-03-14 20:26:45.263497 CET [...]
    UNIT=irqbalance.service
    JOB_TYPE=restart
    JOB_ID=3667
    MESSAGE=Stopped irqbalance daemon.
Mon 2022-03-14 20:26:45.264912 CET [...]
   JOB_TYPE=start
   JOB_RESULT=done
   UNIT=irqbalance.service
   JOB_ID=3667

如上所述,这似乎没有记录,但重新启动一个单元将生成所有带有相同标记的这些条目JOB_ID。手动stopping 和starting 设备只会生成具有不同s 的stop和条目。startJOB_ID

相关内容