Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 07 май 2012, 09:43
Продолжаю пилить скрипт запроса баланса GSM-модемов.
Благодаря помощи оказанной на форуме разобрался с парсингом данных, добился того, что скрипт запускаемый из командной строки работает нормально.
Вставил запуск его в cron и получил облом.
Скрипт работает но не на все сто процентов.
Балансы запрашиваются, полученный данные парсятся нормально и в базу заносятся.
Не работают sql-запросы делающие выборку данных из базы и записывающие результаты в текстовые файлы чтобы можно было видеть результаты через веб.
Вот такой запрос работает нормально
а вот такой
и такой
ничего в файл не выводят.
И что самое противное во втором скрипте из набора (который проверяет не опустился ли баланс ниже определенного значения) есть очень похожий запрос
и он запущенный cron'ом отрабатывается нормально...
Система CentOS 5.8 (Elastix 2.3 с последними обновлениями)
Скрипт запускается от root'а.
Гугления результата не дало.
Практически во всех случаях подобная проблема была вызвана тем, что для заданий запускаемых cron'ом переменная PATH отличалась от этой же переменной в командной строке.
Посмотрел содержимое переменной в командной строке, прописал такую же в /etc/crontab - не помогло.
Прописал в скрипте вызов команды mysql с полным путем - тоже не помогло.
В /var/log/cron ничего интересного нет.
В почте root'а куда падают отчеты о выполнении заданий тоже ничего интересного.
Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.
Нашел в инете упоминание о подобной проблеме
http://forum.sysadmins.su/index.php?showtopic=3516
но решения там не приводится.
Благодаря помощи оказанной на форуме разобрался с парсингом данных, добился того, что скрипт запускаемый из командной строки работает нормально.
Вставил запуск его в cron и получил облом.
Скрипт работает но не на все сто процентов.
Балансы запрашиваются, полученный данные парсятся нормально и в базу заносятся.
Не работают sql-запросы делающие выборку данных из базы и записывающие результаты в текстовые файлы чтобы можно было видеть результаты через веб.
Вот такой запрос работает нормально
Код: Выделить всё
# Заполняем базу значениями
mysql -u$dbuser -p$dbpass -D $dbname -e "INSERT INTO ${tbname} (md5,port,balans,time) values ('$mdha' , '$modnumr' , '$balance' , '$baldate');" >/dev/null
Код: Выделить всё
mysql -u$dbuser -p$dbpass -D $dbname -e "\
set @a=0.0;select port as 'Модем',time as 'Дата Время',balans as 'Баланс',if(delta>0 and balans<>delta,delta,'-') as 'Приход',if(delta<0,delta,'-') as 'Расход' \
from(select * from (select port,time,balans,round(balans-pv_balans,2) as delta \
from(select port,time,@a as pv_balans,@a:=balans,balans \
from ${tbname} where port='${num}' order by time) as t1) as t2 where delta<>0) as t3;" | column -t >> $repath/bal-$num.txt
Код: Выделить всё
# Создаем сводный отчет по текущим балансам
zapr="select port as 'Модем',balans as 'Баланс',time as 'Дата Время' \
from (select * from (select max(time) as last_date,port as prt \
from ${tbname} group by port) as tbl1 \
JOIN ${tbname} where tbl1.last_date=${tbname}.time and tbl1.prt=${tbname}.port) as itog where port<>'' order by port;"
mysql -u$dbuser -p$dbpass -D $dbname -e "${zapr}" | column -t > $repath/balans_ob.txt
И что самое противное во втором скрипте из набора (который проверяет не опустился ли баланс ниже определенного значения) есть очень похожий запрос
Код: Выделить всё
# Создаем сводный отчет по низким балансам
zapr="select port as 'Модем',balans as 'Баланс',time as 'Дата Время' \
from (select * from (select max(time) as last_date,port as prt \
from ${tbname} group by port) as tbl1 \
JOIN ${tbname} where tbl1.last_date=${tbname}.time and tbl1.prt=${tbname}.port) as itog where port<>'' and balans<'${porog}' order by port;"
mysql -u$dbuser -p$dbpass -D $dbname -e "${zapr}" | column -t > emltmp
Система CentOS 5.8 (Elastix 2.3 с последними обновлениями)
Скрипт запускается от root'а.
Гугления результата не дало.
Практически во всех случаях подобная проблема была вызвана тем, что для заданий запускаемых cron'ом переменная PATH отличалась от этой же переменной в командной строке.
Посмотрел содержимое переменной в командной строке, прописал такую же в /etc/crontab - не помогло.
Прописал в скрипте вызов команды mysql с полным путем - тоже не помогло.
В /var/log/cron ничего интересного нет.
В почте root'а куда падают отчеты о выполнении заданий тоже ничего интересного.
Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.
Нашел в инете упоминание о подобной проблеме
http://forum.sysadmins.su/index.php?showtopic=3516
но решения там не приводится.