用于重新启动 memcached 的 Cron 脚本不起作用
Posted
技术标签:
【中文标题】用于重新启动 memcached 的 Cron 脚本不起作用【英文标题】:Cron script to restart memcached not working 【发布时间】:2016-02-16 14:55:24 【问题描述】:我在 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 分钟运行一次。
我做错了什么?
是否需要使用以下内容而不是 service memcached restart?
/etc/init.d/memcached restart
我有另一个脚本可以检查以确保我的 lighttpd 实例正在运行并且工作正常。验证它是否正在运行时,它的工作方式略有不同,但它使用 init.d 调用来重新启动。
编辑 - 解决方法:使用 /etc/init.d/memcached restart 解决了这个问题。
【问题讨论】:
【参考方案1】:通常导致 crontab 问题的是命令路径。在命令行中,命令的路径已经存在,但在 cron 中它们通常不存在。如果这是您的问题,您可以通过在 crontab 顶部添加以下行来解决它:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
这将为 cron 提供显式路径,以查找脚本运行的命令。
另外,脚本中的 shebang 是错误的。它必须是:
#!/bin/bash
【讨论】:
谢谢。你是对的 - sbin 不在 cron 的路径中,所以“服务”不起作用。 ***.com/questions/8127433/…【参考方案2】:我怀疑问题出在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
的作用。
【讨论】:
我试过了——它在 cronjob.log 文件中吐出“什么都不做”文本,因为它正在运行。11211 是 memcached 运行的端口。运行 memcached 的启动命令是 memcached -d -p 11211 -u memcached -m 512 -c 1024 -P /var/run/memcached/memcached.pid 所以它会匹配。 何不手动kill掉,看看cron作业是否重启? 我不得不等到我的网站上的低时间,但它现在可以使用 /etc/init.d/memcached restart 我使用服务收到的消息是:/home/mysite/www/check_memcached。 sh:第 10 行:服务:找不到命令【参考方案3】:将以下代码另存为 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。
【讨论】:
以上是关于用于重新启动 memcached 的 Cron 脚本不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 cron 重新启动弹性 beanstalk 应用程序服务器