监视或观察某个进程,如果进程出现故障则重新启动

监视或观察某个进程,如果进程出现故障则重新启动

我有一个在 rc.local 中启动的工作程序。该程序并不是世界上最稳定的程序,因此我想设置某种类型的监视程序来检查上述程序是否正常运行,如果没有,则重新启动该程序。

我可以想象有几种方法可以做到这一点,但我确信还有更多:

  1. 运行一个 cron 任务,查找正在运行的程序。如果存在,则停止,否则将触发程序的另一个实例
  2. 运行一个专用的监控程序,该程序始终运行并频繁轮询以查看程序是否正在运行。

你们当中有谁有这些实现的例子或者关于我应该如何做的建议吗?

答案1

我建议监控。您可以从 Synaptic 或 sudo apt-get install monit 安装它。我在我的服务器上使用它来监控我的 SSH、Apache 等,如果它们失败,则重新启动它们。

答案2

您可能能够使用以无限循环运行该过程的辅助脚本,例如:

#!/bin/bash

# Infinite loop
while true; do

    # Get starting time
    start_epoch=$(date +%s)

    # Run program
    my-program

    # Abort if the application exited too quickly
    duration=$(( $(date +%s) - $start_epoch ))
    if [[ "$duration" < 30 ]]; then
        echo "Program exited too quickly. Aborting relauncher."
        exit
    fi

done

exit

调用此脚本而不是my-program在 中/etc/rc.local

有关更复杂的例子,请参见这个脚本我使用它来自动重启 NetworkManager Applet。

相关内容