我正在尝试确保脚本在开发服务器上保持运行。它整理统计数据并提供web服务,因此它应该是持久的,然而一天中有几次,它因为未知的原因而消亡。当我们注意到时,我们只是再次启动它,但这是一个痛苦的后方,一些用户没有权限(或技术)启动它。
我的程序员想花几个小时找出问题的根源,但我忙碌的人认为必须有一种简单的方法来检测应用程序是否没有运行,并重新启动它。
我知道我可以通过grep对ps执行cron脚本:
ps -A | grep appname
但是,再说一次,这又浪费了我生命中的一个小时去做一些肯定已经存在的事情……有没有一个预制的应用程序,我可以传递一个可执行文件(可选的参数),并将保持一个进程无限期运行?
如果有什么不同的话,那就是Ubuntu。
发布于 2008-11-18 14:49:41
注意: Upstart处于维护模式,被使用systemd的Ubuntu abandoned。有关如何编写服务定义的详细信息,请查看systemd‘manual。
既然你正在使用Ubuntu,你可能会对Upstart感兴趣,它已经取代了传统的sysV init。一个关键特性是,如果服务意外终止,它可以重新启动服务。Fedora已经转移到了暴发户,而Debian还处于实验阶段,所以它可能值得一看。
然而,对于这种情况来说,这可能有些过分了,因为cron脚本需要2分钟才能实现。
#!/bin/bash
if [[ ! `pidof -s yourapp` ]]; then
invoke-rc.d yourapp start
fi
发布于 2009-05-26 14:57:41
我在cron中使用了一个简单的脚本来确保程序正在运行。如果不是,那么它将启动它。这可能不是您正在寻找的完美解决方案,但它很简单,而且效果相当好。
#!/bin/bash
#make-run.sh
#make sure a process is always running.
export DISPLAY=:0 #needed if you are running a simple gui app.
process=YourProcessName
makerun="/usr/bin/program"
if ps ax | grep -v grep | grep $process > /dev/null
then
exit
else
$makerun &
fi
exit
然后每分钟或每5分钟添加一个cron作业。
发布于 2008-11-18 13:51:54
Monit非常适合这样做:)
您可以编写简单的配置文件来告诉monit进行监视,例如TCP端口、PID文件等
monit将在它监控的进程不可用/使用太多内存/占用CPU太长时间/等情况下运行您指定的命令。它还会弹出一个电子邮件警报,告诉您发生了什么以及它是否可以对此采取任何措施。
我们使用它来保持我们的网站的负载运行,同时在出现问题时给我们早期警告。
--你忠实的员工,莫尼特
https://stackoverflow.com/questions/298760
复制相似问题