【问题标题】:How to check how many times linux service restarted如何检查linux服务重启了多少次
【发布时间】:2021-10-05 16:23:18
【问题描述】:

有没有办法检查特定时间范围内 linux 服务重启了多少次?目前使用 systemctl status nameOfService | grep -Po ".*; \K(.*)(?= ago)" 来延长正常运行时间,但这还不足以进行诊断。

【问题讨论】:

    标签: linux systemctl


    【解决方案1】:

    如果您有那个时期的日志,您确实可以从日志中提取“已停止”/“已启动”消息。在现在使用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 解析输出。

    【讨论】:

      【解决方案2】:
      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_... 的东西所希望的。
      • 你是对的,但就我而言,这就足够了——我的服务写着“正在启动 serviceName1...”、“正在启动 serviceName2...”
      猜你喜欢
      • 2017-02-12
      • 2016-12-05
      • 2021-08-11
      • 2011-03-31
      • 1970-01-01
      • 2021-12-18
      • 2014-08-22
      • 1970-01-01
      相关资源
      最近更新 更多