【发布时间】:2021-10-05 16:23:18
【问题描述】:
有没有办法检查特定时间范围内 linux 服务重启了多少次?目前使用
systemctl status nameOfService | grep -Po ".*; \K(.*)(?= ago)"
来延长正常运行时间,但这还不足以进行诊断。
【问题讨论】:
有没有办法检查特定时间范围内 linux 服务重启了多少次?目前使用
systemctl status nameOfService | grep -Po ".*; \K(.*)(?= ago)"
来延长正常运行时间,但这还不足以进行诊断。
【问题讨论】:
如果您有那个时期的日志,您确实可以从日志中提取“已停止”/“已启动”消息。在现在使用systemd 的系统上,许多系统使用journalctl,但许多系统使用其他东西——您必须检查您的特定系统如何查询日志。
您的脚本可能看起来有些相似:
journalctl --since=<date> --until=<another data> UNIT=<service name> SYSLOG_IDENTIFIER=systemd |
awk '
/Started/{ started = 1 }
/Stopped/{ if (started) { started = 0; restarted++; } }
END {
print "It was restarted " restarted "times."
}
'
这里的正则表达式只是一个例子。最好使用journalctl -o json 并使用jq 解析输出。
【讨论】:
journalctl --since "date" | grep "Starting Some Service" | wc -l
journalctl 显示自定义日期以来的日志
grep 通过伴随重启服务的消息进行过滤
wc -l统计结果
【讨论】:
grep "Starting Some Service" 请注意,如果您的服务会写入类似的消息,例如logger "Reacting to Starting Some Service",那么读数将是错误的 - 太大。可能需要一个更好的匹配正则表达式,或者在journalctl 端进行额外过滤——这就是UNIT=... SYSLOG_... 的东西所希望的。