我目前正在客户家中部署计算机。
我正在运行以下脚本:
- ngrok(一个 ssh 转发隧道守护进程)
- heartbeat.py(向 loggly 发送心跳信号以确认我的计算机处于活动状态的脚本)
- metrics.py(将所有环境数据(例如温度、磁盘空间)记录到 loggly 的脚本)
因此,在我迄今为止的测试中,metrics.py 有点不稳定(意味着它偶尔会崩溃)。
*NIX 中是否有一个包可以执行以下操作?
- 每隔 X 秒检查进程是否正在运行
- 如果 #1 不为 true,则运行它
- 对进程列表执行此操作
答案1
尽管我很不喜欢systemd
,但我不得不承认它绝对可以做到这一点。
并非所有init
系统都支持自动重新启动失败的进程。
但是,请注意,检查进程是否仍在“运行”只是您可以执行的最基本的运行状况检查。如果程序的主循环可以检查某种“你还活着吗?”,那就更好了。留言并回复。然后您就知道它没有陷入无限循环,或者陷入等待无法完成的 I/O。
答案2
也许,简单的脚本可以帮助:
ps -axu | grep '[n]grok' 2>&1 1>/dev/null || bash -c "ngrok"
上面的脚本检查 的运行状态ngrok
,如果没有运行,则执行命令启动它。命令中的括号grep
有助于过滤结果中的 grep 命令本身。
将其添加到您的cron
配置文件中,它将定期检查。
笔记:
您可能需要在检查和重新启动之间添加一些延迟,还需要设置重试上限,以防止ngrok
出现某些严重错误且无法再次启动的情况。