可执行文件死后如何重新启动


Answers:


7

如果它是从init启动的,则可以通过init重新生成它。将流程的操作设置为“重生”以获取所需的流程运行级别。


同样,launchd非常不错。
杰里米·L,2009年

嗯 守护程序工具对于这种东西也很酷,但是不幸的是没有通过“内置”测试。
Cian

10

我以前也回答过类似的问题

在您的情况下:

#!/bin/bash
while ! <<command>>
do
  sleep 1
  echo "Restarting program..."
done

替换<<command>>为您要执行的命令。该过程必须以退出代码零结束,以打破循环。否则,它将通过脚本重新启动。


真好 这也适用于ksh,我将“ echo”更改为“ logger”命令以将消息放入系统日志。

完美答案bro.keep up。
Arunjith RS

4

如果它死了,您是否只想重新启动它? 问题在于它不能处理冻结的情况。 因此,仅检查过程并不总是有帮助。因此,如果这类似于Web服务器,则需要一个脚本从用户的角度检查它。

如果设置了Nagios Monitoring,则可以使用事件处理程序。这些只是您编写的脚本,这些脚本将在服务关闭时运行。因此,如果网站关闭,您可能需要重新启动Apache之类的脚本。


+1,请确保您还涵盖了故意将其杀死的情况。
Maximus Minimus 2009年

好点,虽然就我而言,过程只是消失了
河豚鱼

3

根据发行版的不同,但我们已成功使用“ monit”完成此任务。很简单 您可以编写自己的支票,监视过程PID,等等。

monitrc文件示例:

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

2

为什么不使用简单的bash脚本?

#!/usr/bin/bash
while `true`
do
  xeyes
done

用您选择的程序替换xeyes。


0

简短的回答:不,您必须自己做。

长答案:您需要一个父进程来启动它,然后继续检查它是否处于活动状态,并在需要时重新启动它。

您可以使用类似的方法daemontools进行管理。


简短的答案:你错了。长答案:如果Linux发行版没有inittab,它将具有/etc/event.d/-任一种机制都会在死后重新启动进程。
Paul Tomblin,2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.