pufferfish Asked: 2009-08-28 02:47:30 +0800 CST2009-08-28 02:47:30 +0800 CST 2009-08-28 02:47:30 +0800 CST 如果可执行文件死了,如何重新启动它 772 我正在寻找一种方法来监视进程,并在进程因任何原因死亡时重新启动可执行文件。Linux 是否有内置工具可以做到这一点? linux process 6 个回答 Voted Juliano 2009-08-28T06:56:29+08:002009-08-28T06:56:29+08:00 我之前回答过一个类似的问题。 在你的情况下: #!/bin/bash while ! <<command>> do sleep 1 echo "Restarting program..." done 替换<<command>>为您要执行的命令。该过程必须以退出代码零结束才能中断循环。否则,它将由脚本重新启动。 Best Answer Cian 2009-08-28T03:00:36+08:002009-08-28T03:00:36+08:00 如果它是从 init 启动的,则可以通过 init 重新生成它。对于您希望进程处于的运行级别,将进程的操作设置为“重生”。 Kyle Brandt 2009-08-28T03:13:33+08:002009-08-28T03:13:33+08:00 如果它死了,你只想重新启动它吗? 问题在于它无法处理冻结的情况。 因此,仅检查过程并不总是有帮助。因此,如果这类似于 Web 服务器,您希望有一个脚本从用户的角度检查它。 如果您设置了 Nagios 监控,则可以使用事件处理程序。这些只是您编写的脚本,将在服务关闭时运行,因此如果网站关闭,您可以拥有一个重启类似 Apache 的脚本。 djhowell 2009-08-28T06:16:37+08:002009-08-28T06:16:37+08:00 为什么不是一个简单的 bash 脚本? #!/usr/bin/bash while `true` do xeyes done 用您选择的程序替换 xeyes。 Ramon Poca 2009-08-28T09:31:09+08:002009-08-28T09:31:09+08:00 取决于发行版,但我们已成功使用“monit”来完成此任务。这很容易。您可以编写自己的检查、监控过程 PID 等。 示例监控文件: check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout Amandasaurus 2009-08-28T02:49:49+08:002009-08-28T02:49:49+08:00 简短的回答:不,你必须自己做。 长答案:您需要一个父进程来启动它,然后继续检查它是否处于活动状态并在需要时重新启动它。 你可以使用类似的东西daemontools来管理它。
我之前回答过一个类似的问题。
在你的情况下:
替换
<<command>>
为您要执行的命令。该过程必须以退出代码零结束才能中断循环。否则,它将由脚本重新启动。如果它是从 init 启动的,则可以通过 init 重新生成它。对于您希望进程处于的运行级别,将进程的操作设置为“重生”。
如果它死了,你只想重新启动它吗? 问题在于它无法处理冻结的情况。 因此,仅检查过程并不总是有帮助。因此,如果这类似于 Web 服务器,您希望有一个脚本从用户的角度检查它。
如果您设置了 Nagios 监控,则可以使用事件处理程序。这些只是您编写的脚本,将在服务关闭时运行,因此如果网站关闭,您可以拥有一个重启类似 Apache 的脚本。
为什么不是一个简单的 bash 脚本?
用您选择的程序替换 xeyes。
取决于发行版,但我们已成功使用“monit”来完成此任务。这很容易。您可以编写自己的检查、监控过程 PID 等。
示例监控文件:
简短的回答:不,你必须自己做。
长答案:您需要一个父进程来启动它,然后继续检查它是否处于活动状态并在需要时重新启动它。
你可以使用类似的东西
daemontools
来管理它。