1

在 crontab -e 里面,我添加了这个条目

* * * * * /usr/bin/memcached_autostart.sh

在 /usr/bin 我有一个名为 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,如果我做错了什么,请告诉我。

4

3 回答 3

2

查看您的 crontab 是否正常工作

经过测试,shell exit 可以大于 1,所以尝试更改:

if [ $? -ge 1 ]
于 2012-11-10T08:13:01.257 回答
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 $?

如果没有memcachedpid,(即:没有答案),$?必须不为空。

所以也许:

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

(注意:如果您使用系统 crontab:/etc/cron.d/myJob/etc/crontab,而不是用户的(根)crontab,您必须将用户级别指定为第 6 个字段:

1 2 * * * root ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody

)

于 2012-11-10T14:34:16.627 回答
0

/usr/local/首先,你应该在not下添加你自己的东西/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例如)。

要查询进程表,您可以使用pidofor pgrep; 如果您只想知道监听端口 11211 使用什么进程netstat -p

于 2012-11-10T08:13:37.157 回答