9

Bash:检查,如果没有运行则运行一个进程

嗨,我的要求是,如果 Memcache 服务器在生产中因任何原因停机,我想立即重新启动它

通常,我会以这种方式启动 Memcache 服务器,用户为无人复制,如下所示

memcached -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 作业) 请分享您的经验。

4

2 回答 2

6

是的,问题是ps -eaf | grep 11211 | grep memcached我假设进程 ID 在每次启动时总是改变,所以你应该做的是ps -ef | grep memcached

希望有帮助

于 2012-11-10T08:10:40.020 回答
5

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

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

对于 Ubuntu,您可以查看/etc/init.d/skeleton可以复制的示例脚本。

于 2012-11-10T06:12:32.573 回答