检查其他进程是否正在运行的进程?

检查其他进程是否正在运行的进程?

我目前正在客户家中部署计算机。

我正在运行以下脚本:

  1. ngrok(一个 ssh 转发隧道守护进程)
  2. heartbeat.py(向 loggly 发送心跳信号以确认我的计算机处于活动状态的脚本)
  3. metrics.py(将所有环境数据(例如温度、磁盘空间)记录到 loggly 的脚本)

因此,在我迄今为止的测试中,metrics.py 有点不稳定(意味着它偶尔会崩溃)。

*NIX 中是否有一个包可以执行以下操作?

  1. 每隔 X 秒检查进程是否正在运行
  2. 如果 #1 不为 true,则运行它
  3. 对进程列表执行此操作

答案1

尽管我很不喜欢systemd,但我不得不承认它绝对可以做到这一点。

并非所有init系统都支持自动重新启动失败的进程。

但是,请注意,检查进程是否仍在“运行”只是您可以执行的最基本的运行状况检查。如果程序的主循环可以检查某种“你还活着吗?”,那就更好了。留言并回复。然后您就知道它没有陷入无限循环,或者陷入等待无法完成的 I/O。

答案2

也许,简单的脚本可以帮助:

ps -axu | grep '[n]grok' 2>&1 1>/dev/null || bash -c "ngrok"

上面的脚本检查 的运行状态ngrok,如果没有运行,则执行命令启动它。命令中的括号grep有助于过滤结果中的 grep 命令本身。

将其添加到您的cron配置文件中,它将定期检查。

笔记:

您可能需要在检查和重新启动之间添加一些延迟,还需要设置重试上限,以防止ngrok出现某些严重错误且无法再次启动的情况。

相关内容