我开发了一个软件(用C ++),需要连续运行。 这基本上意味着它每次停止都必须重新启动。
我正在考虑使用cron作业来检查每个分钟是否仍然存在,但是可能有一个更清晰的方法或标准的方法来做到这一点。
提前致谢
Fedora和Ubuntu使用新贵 ,它有能力自动重新启动你的deamon,如果它退出。
我相信做这个最简单的方法是有一个脚本,将启动您的程序,如果它被返回到它只是重新启动它。
#!/bin/sh while true; do ./Your_program done
Monit可以做你想做的和更多。
cron是一个选项,如果你的应用程序将足够聪明的检查自己运行(这是为了避免它的许多副本运行)。 这通常通过PID文件以标准方式完成。
在* nix上有两种正确的方法:
使用操作系统基础设施(如solaris上的smf / svc,Ubuntu上的新贵等)。 这是正确的方法,因为您可以随时停止/重新启动/启用/禁用/重新配置。
在/ etc / inittab中使用“respawn”(在启动时启用)。
launchtool是我用于这个目的的一个程序,它会监视你的进程并根据需要重启它,它也可以在重新定位前等待几秒钟。 如果在应用程序可以重新启动之前需要释放套接字,这可能很有用。 这对我的目的非常有用。
创建您希望持续运行的程序,作为“观察程序”进程的子程序,在程序终止时重新启动程序。 您可以使用wait / waitpid(或SIGCHILD)来告知孩子什么时候终止。 我希望某人的书面代码可以做到这一点(这几乎是init(8)所做的)
但是,这个程序大概是做了一些事情。 您可能不仅要检查应用程序是否正在运行,而且还没有挂起或者正在提供它所打算的服务。 这可能意味着运行某种探测或综合事务来检查它是否正常运行。
编辑:你可能可以让init为你做这个 – 在inittab中给它一个“respawn”的类型。 从手册页:
respawn The process will be restarted whenever it terminates (eg getty).
如果一个脚本每10分钟检查一次,看看应用程序是否正在运行,如果不是,则会重新启动计算机。 如果应用程序正在运行,那么它只是继续检查。
这里是我的脚本使用PrcView是一个免费的进程查看器工具。 我使用notepad.exe作为我的示例应用程序,需要运行,我不确定命令每10分钟检查一次,以及在脚本中的位置。
@echo off PATH =%PATH%;%PROGRAMFILES%\ PV;%PROGRAMFILES%\ Notepad PV.EXE notepad.exe> nul if ERRORLEVEL 1 goto Process_NotFound:Process_Found echo记事本正在运行goto END:Process_NotFound echo记事本未运行关机/ r / t 50转到END:END
这并不容易。 如果你想“我知道,我会写一个程序来观察我的程序,或者看看这样的程序是否已经作为标准服务存在!” 那么如果有人杀了那个节目呢? 谁在观察守望者?