2012-11-10 153 views
5

击:检查后,运行过程中,如果没有运行击:检查后,运行过程中,如果没有运行

嗨, 我的要求是,如果内存缓存服务器关闭以任何理由在生产,我想重新启动它立即

通常我将开始内存缓存服务器以这种方式与用户与复制没有人如下所示

分布式缓存-u无人-l 192.168.1.1 -m 2076 -x 192.168.1.2 -v

所以为了这个,我加在crontab中一个条目这样

(crontab -e命令)

*/5 * * * * /home/memcached/memcached_autostart.sh 

memcached_autostart.sh

#!/bin/bash 
ps -eaf | grep 11211 | grep memcached 
# if not found - equals to 1, start it 
if [ $? -eq 1 ] 
then 
memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v 
else 
echo "eq 0 - memcache running - do nothing" 
fi 

我的问题是内部memcached_autostart.sh,为自动启动memcached服务器,上述脚本是否有问题?

或者

如果实现这一目标的任何更好的方法(而不是使用cron作业) 请分享您的经验。

回答

3

是问题是ps -eaf | grep 11211 | grep memcached我认为是进程ID,它总是变化对每一个开始,所以你应该做的是ps -ef | grep memcached

希望帮助

3

而不是从cron运行它您可能需要创建一个适当的init脚本。示例请参见/etc/init.d/。另外,如果你这样做,大多数系统已经具有处理大部分工作的功能,例如检查启动,重新启动,停止,检查已经运行的进程等。

大多数守护脚本将pid保存到特殊文件(例如/var/run/foo),然后您可以检查该文件的存在。

对于Ubuntu,您可以看到/etc/init.d/skeleton例如脚本,您可以复制它。

+0

我觉得还有一个叫'daemon'功能在'/ etc/init.d/functions'中。这也照顾了runfile.pid。因此,从自动启动脚本获取函数文件并通过守护进程函数调用您的程序是一个好主意。 – anishsane