有没有办法检查服务是否重新启动?当执行systemctl restart myunit.service
或 时systemctl --user restart myunit.service
,日志仅显示我的设备已停止然后再次启动。我需要捕获服务何时重新启动没有停止,然后又开始了。
另外,我不能使用停止和重新启动之间的时间作为解决方案。服务有时不会立即停止。kill -9
如果服务时间超过 10 秒,则超时设置内置于服务单元中。
需要一种方法来判断用户是否快速执行了 a restart
,而不是stop
then 。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
。手动stop
ping 和start
ing 设备只会生成具有不同s 的stop
和条目。start
JOB_ID