Страница 1 из 1
Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 10:16:58
mmvds
Всем привет! Есть часть скрипта:
Код: Выделить всё
dir=/home/scripts
if [ $res -eq '1' ];
then
echo YES $res $status >> $dir/logmsg.log
if [ "$status" == 'DOWN' ];
then
status="UP"
echo $status >> $dir/logmsg.log
fi
else
echo NO $res $status >> $dir/logmsg.log
if [ "$status" == 'UP' ];
then
status="DOWN"
echo $status >> $dir/logmsg.log
fi
fi
данные берутся из файла, но не суть, т.к. с эти проблем нет
проблема в том что при запуске вручную скрипт прекрасно работает, при запуске через крон вложенные условия if [ "$status" == 'DOWN' ]; и if [ "$status" == 'UP' ]; не обрабатываются
при этом if [ $res -eq '1' ]; - обрабатывается
т.е. лог выглядит так:
YES 1 DOWN
YES 1 DOWN
....
а должен
YES 1 DOWN
UP
YES 1 UP
YES 1 UP
директива запуска именно через #!/usr/local/bin/bash в скрипте тоже есть
Подскажите, в чем может быть загвоздка?
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 11:31:36
mak_v_
Откуда берётся переменная $status???
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 11:32:20
kpp
Перед этим блоком
, после
Весь вывод скрипта перенаправить в файл
Код: Выделить всё
/../script.sh > /var/log/test_script.log 2>&1
Проанализировать файл /var/log/test_script.log
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 12:09:57
mmvds
Лог выглядит так
Код: Выделить всё
+ [ 1 -eq 1 ]
+ echo YES 1 DOWN
+ [ DOWN == DOWN ]
[: DOWN: unexpected operator
+ set +x
т.е. ему не нравится само выражение [ DOWN == DOWN ] хотя при запуске вручную, тот же лог:
Код: Выделить всё
++ '[' 1 -eq 1 ']'
++ echo YES 1 DOWN
++ '[' DOWN == DOWN ']'
++ status=UP
++ echo UP
++ set +x
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 12:16:50
mmvds
mak_v_ писал(а):Откуда берётся переменная $status???
по поводу переменной status - берется из файла, но она успешно считывается
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 12:28:18
mmvds
в общем решилось просто - указал в кроне /usr/local/bin/bash /home/scripts/script.sh
Правда вопрос остается, почему он проигнорил #!/usr/local/bin/bash в теле скрипта
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 13:14:45
kpp
mmvds
Как было в кронтабе до того?
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 13:51:47
mmvds
до того было просто /home/scripts/script.sh
точнее * * * * * /home/scripts/script.sh
стало * * * * * /usr/local/bin/bash /home/scripts/script.sh
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 13:54:08
kpp
Покажите первые 10 строк скрипта.
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 13:58:58
mmvds
Код: Выделить всё
#!/usr/local/bin/bash
dir=/home/scripts
cat /dev/null > $dir/tmp.txt
while IFS=: read host_name address ip_addr status
do
res=`/usr/local/sbin/fping $ip_addr | grep -c alive`
date_now=`date '+%Y-%m-%d %H:%M'`
#set -x
if [ $res -eq '1' ];
then
.........
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:06:51
kpp
Эта строка самая первая, без отступов\пробелов?
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:15:13
mmvds
Да, проверял несколько раз, без отступов, пробелов и даже ^M на конце нет, хотя на этой машине FreeBSD 7.1, но по идее повлиять не должно было, на всех скриптах до этого всегда прописывал путь до интерпретатора аналогично и всегда работало, правда остальные машины на 8-ой версии фри и на linux'овых сборках. Больше на 7.1 ни одной нет, но не думаю что в этом проблема.
Кстати, м.б. правильнее делать сравнение в формате, который поймет даже стандартный shell?
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:22:50
kpp
Попробовать так:
В баше [ - сравнение строк "==", в sh - сравнение строк через "=".
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:29:55
kpp
Вернее в баше все равно: "==" или "=".
А для sh - только "=".
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:35:26
mmvds
спасибо!
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 14:41:41
kpp
Всегда пожалуйста.
Однако все равно неясно: почему при запуске из крона, для запуска стрипта стартует шелл по умолчанию, а не указанный в первой строке #!/....
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-10 15:25:59
Bayerische
Мне видится, что shebang игнорируется при запуске из другого файла, коим является crontab, а в качестве шелла используется текущий интерпретатор, в котором отрабатывается данный файл (crontab), т.е. sh.
Re: Глюк if скрипта при запуске через cron
Добавлено: 2012-10-11 9:32:49
mmvds
да, погуглил, действительно,
Bayerische прав, в некоторых версиях freebsd и *nix замечено такое поведение cron
http://www.in-ulm.de/~mascheck/various/shebang/