我开发了一个需要持续运行的软件(用C ++编写)。这基本上意味着它必须在每次停止时重新启动。
我正在考虑使用cron作业检查每一分钟是否仍然存在,但可能有一种更清洁的方式或标准方法。
提前致谢
答案 0 :(得分:9)
Fedora和Ubuntu使用upstart,它可以在退出时自动重启你的守护程序。
答案 1 :(得分:6)
我认为最简单的方法是使用一个启动程序的脚本,如果它返回到它,只需重新启动它。
#!/bin/sh
while true; do
./Your_program
done
答案 2 :(得分:4)
Monit可以做你想做的事情等等。
cron是一个选项,如果你的应用程序足够智能来检查自己运行(这是为了避免它的许多副本运行)。这通常通过PID文件以标准方式完成。
答案 3 :(得分:4)
在* nix上有两种正确的方法:
使用OS基础架构(如solaris上的smf / svc,Ubuntu上的upstart等)。这是正确的方法,因为您可以随时停止/重启/启用/禁用/重新配置。
在/ etc / inittab中使用“respawn”(在启动时启用)。
答案 4 :(得分:2)
launchtool是我用于此目的的程序,它将监视您的进程并根据需要重新启动它,它还可以在重新分配之前等待几秒钟。如果在应用程序重新启动之前需要释放套接字,这可能很有用。这对我的目的非常有用。
答案 5 :(得分:1)
创建您希望作为“观察者”进程的子节点持续运行的程序,该进程在终止时重新启动它。您可以使用wait / waitpid(或SIGCHILD)来判断子进程何时终止。我希望有人编写代码来执行此操作(这几乎与init(8)相同)
然而,程序可能会做点什么。您可能不仅希望检查应用程序是否正在运行,而且它还没有挂起或正在提供它想要的服务。这可能意味着运行某种探测或综合事务来检查它是否正常运行。
编辑:您可以让init为您执行此操作 - 在inittab中为其提供一种“respawn”。从手册页:
respawn
The process will be restarted whenever it terminates (e.g. getty).
答案 6 :(得分:1)
如果脚本每隔10分钟检查一次,以查看应用程序是否正在运行,如果不是,它将重新启动计算机。如果应用程序正在运行,那么它只是继续检查。
这是我使用PrcView的脚本是一个免费的进程查看器实用程序。我使用notepad.exe作为我需要运行的示例应用程序,我不确定每10分钟检查一次的命令以及它在我的脚本中的位置。
@echo off PATH =%PATH%;%PROGRAMFILES%\ PV;%PROGRAMFILES%\记事本 PV.EXE notepad.exe> nul 如果ERRORLEVEL 1转到Process_NotFound :Process_Found echo Notepad正在运行 转到END :Process_NotFound echo Notepad未运行 关机/ r / t 50 转到END :END
答案 7 :(得分:0)
这并不容易。如果您正在考虑“我知道,我会编写一个程序来监视我的程序,或者查看这样的程序是否已作为标准服务存在!”如果有人杀死那个程序怎么办?谁看守望者?