2012-11-21 4 views
0

У меня есть сценарий оболочки linux, который при запуске из командной строки работает отлично, но когда планируется запустить через crontab, он не дает желаемых результатов.Сценарий оболочки не работает должным образом

Сценарий довольно прост, он проверяет, работает ли mysql-proxy или нет, проверяя, найден ли его pid с помощью команды pidof. Если обнаружено, что он выключен, он пытается запустить прокси.

# Check if mysql proxy is off 
# if found off, attempt to start it 

if pidof mysql-proxy 
then 
    echo "Proxy running." 
else 
    echo "Proxy off ... attempting to restart" 
    /usr/local/mysql-proxy/bin/mysql-proxy -P 172.20.10.196:3306 --daemon --proxy-backend-addresses=172.20.10.194 --proxy-backend-addresses=172.20.10.195 

    if pidof mysql-proxy 
    then 
     echo "Proxy started" 
    else 
     echo "Proxy restar failed" 
    fi 
fi 
echo "===============================================" 

Сценарий сохраняется в файле check-sql-proxy.sh и имеет права доступа к . Когда я запускаю скрипт из командной строки (sh check-sql-proxy.sh), он дает желаемый результат.

4066 
Proxy running. 
=============================================== 

Сценарий также планируется запустить через каждые 5 минут в кронтаб, как

*/5 * * * * bash /root/auto-restart-mysql-proxy.sh > /dev/sql-proxy-restart-log.log 

Однако, когда я вижу SQL-прокси-рестарт-log.log файл содержит вывод:

Proxy off ... attempting to restart 
Proxy restar failed 
=============================================== 

кажется, что pidof команда не возвращает идентификатор процесса запущенного приложения, которое приносит поток сценария в другом состоянии.

Я не могу понять, как это решить, поскольку, когда я запускаю скрипт вручную, он отлично работает.

Может ли кто-нибудь помочь, что мне не хватает в отношении разрешений или настроек?

Заранее спасибо. Mudasser

+1

Разрешения не должны устанавливаться на 777; что позволяет любому пользователю редактировать вашу команду, когда захочет.Сделать все, что вы можете сделать. Как 'rm -fr/home/you'. –

ответ

2

Убедитесь, что оболочка, что вы думаете, что это (обычно/бен/ш, не Баш)

Также проверьте эту переменную PATH среды. Обычно для заданий cron является хорошей практикой полностью квалифицировать все пути к двоичным файлам, например.

#!/bin/bash 
# Check if mysql proxy is off 
# if found off, attempt to start it 

if /bin/pidof mysql-proxy 

т.д.

+0

Спасибо за помощь. Проблема полностью решена. –

0

Try pidof/USR/местные/MySQL-прокси/бен/MySQL-прокси (полный путь к исполняемым)

В общем, попробуйте использовать такое же имя команды, как это было используется для запуска экземпляра mysql-proxy.

0

Проблема кажется, что crontab окружающая среда не имеет такой же среды, как вы.

У вас есть 2 простых & правильные решения:

В первых строках crontab:

PATH=/foo:/bar:/qux 
SHELL=/bin/bash 

или

source ~/.bashrc 

в сценариях.

+0

Addeed 'SHELL =/bin/bash' для' crontab' –

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