crontab -e内,我添加了此条目
* * * * * /usr/bin/memcached_autostart.sh
和内部/usr/bin I具有名为memcached_autostart.sh
的脚本/usr/bin memcached_autostart.sh
#!/bin/bash
ps -eaf | grep 11211 | grep memcached
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
memcached -d -m 16 -p 11211 -u nobody
else
echo "eq 0 - memcache running - do nothing"
fi
当我手动测试此方式
时启动了memcache
memcached -d -m 16 -p 11211 -u nobody
ps -eaf | grep 11211 | grep memcached
nobody 611 1 0 13:28 ? 00:00:00 memcached -d -m 16 -p 11211 -u nobody
然后杀死了该过程
kill -9 611
我期望crontab如果下降会自动启动memcache,但它没有启动memcache,请告诉我我是否做错了。
查看您的crontab是否在工作
测试后,外壳出口可能大于1,因此请尝试更改:
if [ $? -ge 1 ]
首先您的cron:
在此标题中,您每24小时都在谈论。为此,你有要在两个第一个领域的一天中的哪一刻进行刺激:
1 2 * * * doTheJob
所以每个day of month
,每个month
和每个day of week
,在2小时1分钟,脚本将运行
更好的是将您的脚本放在/etc/cron.daily
中。
现在为这份工作,您是否尝试过:
ps -C memcached
ps -C memcached ho pid
echo $?
如果没有memcached
PID,(即:没有答案),$?
必须不为null。
所以也许:
ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody
这可能是一个脚本,只是在您的crontab中:
1 2 * * * ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody
(nota:如果您使用系统crontab: /etc/cron.d/myJob
或 /etc/crontab
,而不是用户的(root)crontab,则必须将用户列为第六字段:
1 2 * * * root ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody
)
首先,您应该在/usr/local/
下添加自己的东西,而不是/usr/
(由包装机制管理)。
然后您的crontab条目
* * * * * /usr/bin/memcached_autostart.sh
每分钟运行。您确定要经常运行吗?我会每5或10分钟运行一次(而且我不确定它真的有用,因为memcached
是一个调试良好的守护程序,很少崩溃)。
终于,我建议将使用logger
的记录消息添加到您的/usr/local/bin/memcached_autostart.sh
脚本中(并确保以chmod a+x /usr/local/bin/memcached_autostart.sh
的可执行文件)。
要查询过程表,您可以使用pidof
或pgrep
;如果您只想知道哪个过程正在收听端口11211使用netstat -p