我有一个 ec2 的微型实例。时不时有几个 java 进程会被终止。
我可以运行哪个工具来监视进程并在它们被终止时重新启动?
答案1
我认为从 cron-job 调用几个程序的管道不是监控服务的最简单方法。在我看来,最简单方法是使用 init 进程来监督您的进程。不幸的是,最流行的 /sbin/init 实现 (SysVinit) 不能很好地完成这一点。Upstart 更擅长这项任务,systemd 可能也是如此。
另一种选择是使用非初始化进程监控程序,例如supervise
来自 daemontools 包及其克隆的程序。此类监控程序启动一次,运行受监控的进程,并且仅在发生某些事情(例如崩溃)时才做出反应。因此,它几乎不使用额外资源,并立即对崩溃做出反应。
答案2
最轻量级的方式是只运行一个 cron 任务,如果程序尚未运行,则启动它。在大多数情况下,只需简单 grep ps 即可知道它是否正在运行:
( ps x | grep $PROGRAM NAME | grep -v grep ) || /path/to/program