【问题标题】:Detect if a process has stopped in ubuntu检测进程是否在 ubuntu 中停止
【发布时间】:2012-08-25 12:39:57
【问题描述】:

我的服务器上运行着一个守护进程。它已经平稳运行了一段时间,并且我一直在守护进程中记录每个事件的发生。

昨天我发现了一些奇怪的东西。守护程序已停止运行,但日志中没有错误条目。

对于我的系统来说,这个守护进程保持运行非常重要,如果它因任何原因停止,它会重新启动。

有没有一种方法可以定期检测特定进程是否在 Ubuntu 中运行?如果我能检测到我可以轻松地重新启动它,但检测是主要问题

【问题讨论】:

    标签: ubuntu process daemon


    【解决方案1】:

    使用 cron。

    让它每 x 分钟运行一次脚本

    在你的脚本中使用类似的行

    ps aux | grep -c <your process/daemon name>
    

    并检查输出。

    这将始终返回至少一个(检查进程本身的进程) 所以也许如果你的计数大于 1,你可以假设你的进程正在运行并且什么都不做,否则重启守护进程。

    https://help.ubuntu.com/community/CronHowto

    如果您的进程需要由特定用户(例如 wwwrun)运行,请确保您以该用户身份启动该进程

    【讨论】:

    • 感谢您的回复@Loopo。我将使用它,但就像其他尝试使用它的人的说明一样,另一个命令本身中的 grep 进程作为响应之一返回。因此,如果进程正在运行,则计数为 2。
    【解决方案2】:

    如果程序没有自动从控制台分离(即继续在前台运行),您可以执行以下操作:

    while /bin/true; do
      /PATH/TO/YOUR/daemon
      logger -p local0.warn "daemon crashed"
    done
    

    这将记录一个警告并重新启动守护进程。否则你可能不得不运行一个看门狗:

    PID=`cat /var/run/daemon.pid`
    if [ -z `ps hp $PID` ]; then
      logger -p local0.warn "daemon crashed"
    fi
    

    if [ -z `ps ax | grep [d]aemon` ]; then
      logger -p local0.warn "daemon crashed"
    fi
    

    在第一个示例中的循环中,或者按照 Loopo 的建议通过 cron。

    上一个示例中守护进程名称的第一个字母周围的方括号可防止 grep 进程显示在输出中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2011-10-19
      • 1970-01-01
      • 2018-04-12
      相关资源
      最近更新 更多