Crontab выполняет скрипт по-другому

У меня есть скрипт, который проверяет, работает ли служба MySQL на моем сервере Linux. Если я запускаю скрипт вручную, он работает нормально, но когда crontab запускает скрипт, он получает другие результаты.

Это мой сценарий:

#! /bin/sh

TODAY=$(/bin/date)

UP=$(/sbin/service mysql status| /bin/grep 'SUCCESS' | /usr/bin/wc -l);
if [ "$UP" -ne 1 ];
then
        echo "mysql not working, Date: $TODAY" >> /scripts/sql_log.txt;
        sudo /bin/mail -s "MySql is DOWN" [email protected] < /dev/null
        sudo /sbin/service mysql start  

else 
        echo "mysql is working, Date: $TODAY" >> /scripts/sql_log.txt;      
fi

Я использую полный путь к командам. Единственная часть, которую я не понимаю на 100%, это:

if [ "$UP" -ne 1 ];

Что это -ne 1?

Итак, в этом случае MySQL работает: Если я запускаю скрипт вручную, он пишет, что MySQL работает в файле журнала. Но Crontab просто пишет, что MySQL не работает в файле журнала (даже если он работает) и не отправляет почту или что-то в этом роде.

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

Есть идеи?


person DJack    schedule 14.04.2015    source источник
comment
Есть ли у вашего cron права на запуск сервисной команды? Что я, вероятно, сделал бы, так это настроил задание cron только с service mysql status, которое должно отправить вам вывод по почте. Тогда вы можете проверить, что он говорит. Это может быть что-то вроде Permission Denied или даже bash: service: command not found В любом случае это должно дать вам некоторые подсказки.   -  person chw21    schedule 14.04.2015
comment
Почему он не отправляет электронное письмо: возможно, ваш вызов sudo блокируется, так как он запрашивает пароль.   -  person Manuel Barbe    schedule 14.04.2015
comment
Я только что заметил, что мой cron работает с другим $PATH.   -  person chw21    schedule 14.04.2015
comment
Я отредактировал свой вопрос..   -  person DJack    schedule 14.04.2015


Ответы (1)


Теперь это работает.. похоже, проблема была вызвана тем, что я не написал полный путь к команде.. Это скрипт, который я использую сейчас, и он работает:

#! /bin/sh
UP=$(/sbin/service mysql status| /bin/grep 'SUCCESS' | /usr/bin/wc -l);
if [ "$UP" -ne 1 ];
then
        sudo /bin/mail -s "MySql is DOWN" [email protected] < /dev/null
        sudo /sbin/service mysql start      
fi
person DJack    schedule 15.04.2015