2016-02-16 4 views
1

У меня есть скрипт в cron, чтобы проверить memcached и перезапустить его, если он не работает. По какой-то причине это не работает. Script, с разрешениями: запись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?

/etc/init.d/memcached restart 

У меня есть еще один скрипт, который проверяет, работает ли мой экземпляр lighttpd, и он работает нормально. Он работает несколько иначе, чтобы проверить, работает ли он, но использует вызов init.d для перезапуска.

Редактировать - Resolution: Использование /etc/init.d/memcached restart решает эту проблему.

ответ

0

Что обычно вызывает проблемы crontab - это пути команд. В командной строке пути к командам уже есть, но в cron их часто нет. Если это ваш вопрос, вы можете решить, добавив следующую строку в верхней части кронтаб:

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

Это даст CRON явные пути, чтобы просмотреть, чтобы найти команды работает ваш сценарий.

Кроме того, ваш shebang в вашем скрипте неверен. Она должна быть:

#!/bin/bash 
+0

спасибо. Вы правы - sbin не находится на пути к cron, поэтому «сервис» не работает. http://stackoverflow.com/questions/8127433/unable-to-run-a-service-command-via-cron – 63bus

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.

+0

Я пробовал это - он выплевывает текст «ничего не делать» в файле cronjob.log, так как он работает .11211 - это запуск memcached порта. Командой запуска для запуска memcached является memcached -d -p 11211 -u memcached -m 512 -c 1024 -P /var/run/memcached/memcached.pid, чтобы он соответствовал этому. – 63bus

+0

Почему бы вам не убить его вручную и посмотреть, перезапустит ли это задание cron? – dancancode

+0

Мне пришлось подождать до самого низкого времени на моем сайте, но теперь он работает с использованием перезапуска /etc/init.d/memcached. Сообщение, которое я получил с помощью службы, было: /home/mysite/www/check_memcached.sh: строка 10: служба: команда не найдена – 63bus

Смежные вопросы