重启memcached的Cron脚本无法正常工作

时间:2016-02-16 14:55:25

标签: linux bash cron memcached

我在cron中有一个脚本来检查memcached,如果它不能正常工作则重新启动它。由于某种原因,它不起作用。 脚本,有权限:

-rwxr-xr-x  1 root     root       151 Aug 28 22:43 check_memcached.sh

Crontab条目:

*/5 * * * *  /home/mysite/www/check_memcached.sh  1> /dev/null 2> /dev/null

脚本内容:

#!/bin/sh

ps -eaf | grep 11211 | grep memcached
if [ $? -ne 0 ]; then
        service memcached restart
else
        echo "eq 0 - memcache running - do nothing"
fi

如果我从命令行运行它,它工作正常,但昨晚memcached崩溃,它没有从cron重新启动。我可以看到cron每5分钟运行一次。

我做错了什么?

我是否需要使用以下代替服务memcached restart?

/etc/init.d/memcached restart

我有另一个脚本,检查以确保我的lighttpd实例正在运行并且工作正常。它的工作方式略有不同,以验证它是否正在运行,但是使用init.d调用来重新启动。

编辑 - 解决方案:使用/etc/init.d/memcached restart解决了这个问题。

3 个答案:

答案 0 :(得分:1)

通常导致crontab问题的是命令路径。在命令行中,命令的路径已经存在,但在cron中,它们通常不存在。如果这是您的问题,您可以通过在crontab的顶部添加以下行来解决它:

 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

这将提供cron显式路径以查找脚本运行的命令。

另外,你脚本中的shebang是错误的。它必须是:

#!/bin/bash

答案 1 :(得分:0)

我怀疑问题出在grep 11211上 - 数字的含义并不清楚,grep可能与所需的过程不匹配。

我认为您需要记录此脚本的操作 - 然后您会看到实际发生的情况。

#!/bin/bash

exec >> /tmp/cronjob.log 2>&1
set -xv

cat2 () { tee -a /dev/stderr; }

ps -ef | cat2 | grep 11211 | grep memcached
if [ $? -ne 0 ]; then
        service memcached restart
else
        echo "eq 0 - memcache running - do nothing"
fi

exit 0

set -xv输出被捕获到/tmp中的日志文件中。 cat2会将stdin复制到日志文件中,以便您了解grep正在采取的行动。

答案 2 :(得分:0)

将以下代码另存为check_memcached.sh

#!/bin/bash

MEMCACHED_STATUS=`systemctl is-active memcached.service`
if [[ ${MEMCACHED_STATUS} == 'active' ]]; then
    echo " Service running.... so exiting "  
    exit 1
else
    service memcached restart
fi

您可以将其安排为cron。