Страница 2 из 3
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 08 май 2012, 13:09
SolarW
Не, думаю
Sfinx что-то другое имел в виду, просто перенаправлять я пробовал, цитирую первое сообщение темы
SolarW писал(а):Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 08 май 2012, 14:55
SolarW
Ввел через echo вывод переменных при исполнении скрипта.
Вывелось следующее:
Код: Выделить всё
dbuser - user
dbpass - password
dbname - asteriskcdrdb
zapr - select port as 'Модем',balans as 'Баланс',time as 'Дата Время' from (select bin boot dev etc home lib lost+found media mnt opt proc root sbin selinux srv sys tftpboot tmp usr var from (select max(time) as last_date,port as prt from gsmbalans group by port) as tbl1 JOIN gsmbalans where tbl1.last_date=gsmbalans.time and tbl1.prt=gsmbalans.port) as itog where port<>'' order by port;
Cижу, смотрю на результат немного озадаченный.
Что в переменной zapr которая через ключ -e скармливается команде mysql делает листинг корневого каталога моей системы?
Напомню что в скрипте формирование переменной zapr выглядит во так:
Код: Выделить всё
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;"
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 08 май 2012, 19:10
Vlad1983
попробовать заменить в этом выражении * на last_date,prt,md5,port,balans,time, а в первом на port,time,balans,delta
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 09 май 2012, 05:46
Sfinx
SolarW писал(а):Не, думаю
Sfinx что-то другое имел в виду, просто перенаправлять я пробовал, цитирую первое сообщение темы
SolarW писал(а):Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.
Данное перенаправление не учитывает поток stderr, а 2>&1 указывает на добавление оного к log-выводу скрипта. В stderr программы выводят сообщения об ошибках, так как особенностью данного потока является полное отсутствие буферирования.
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 09 май 2012, 05:48
Sfinx
SolarW писал(а):Sfinx писал(а):А последовать моему второму совету ?
Sfinx писал(а):Ну про проверку shell return code монитора я вообще молчу.
Учитывая что ручной запуск выполняется без ошибок что-то у меня сомнения в необходимости анализа кодов возврата.
Sfinx писал(а):Также не помешает вставка отладочной печати дабы убедиться что все переменные в скрипте ресолвятся верно.
Перед выполнением запроса через echo вывести переменные передающиеся запросу? Попробую но думаю что если бы они неправильно передавались mysql при запуске ругался бы какими-нибудь ошибками типа неправильный пароль или база данных...
Может он и ругается, но мы не видим stderr, а проверять return value не хотим, как бы клинч получается. Боюсь, я тут уже не помощник
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 10 май 2012, 10:50
siv237
Вот непонятно, зачем столько текста?
У человека скрипт запущенный в ручную из баша под root отрабатывает и всё выполняет. Значит все силы на запуск из под крона.
в файле /etc/crontab можно вписать
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
LC_ALL=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC__TIME=ru_RU.UTF-8
LC_COLLATE=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES=ru_RU.UTF-8
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LANG=ru_RU.UTF-8
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 10 май 2012, 11:04
siv237
Vlad1983 писал(а):накой в файлы писать когда можно сразу из БД читать?
Был бы интересен пример того же самого на php с прямым запросом к базе.
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 10 май 2012, 11:35
SolarW
Блин!!!
Для кроновских заданий локаль другая, как я мог забыть...
Естественно что запросы в которых была кирилица не отрабатывались...
Путь и интерпретатор я проверил раньше (посмотрел echo $PATH и такой же прописал в кронтабе) а вот про локаль забыл.
Вывод - работает
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 10 май 2012, 12:04
SolarW
В качестве вклада в общее дело
Код: Выделить всё
" dongle1 KS +380981234567 КИЕВСТАР *111#"
" dongle2 MTS +380951234567 МТС *110*10*01#"
" dongle3 UTEL +380911234567 Укртелеком *100#"
" dongle4 LF +380931234567 Лайф *111#"
Код: Выделить всё
######## Варианты парсинга баланса для разных операторов #######################
# Результат разбора должен быть в виде:
# 28.04.2012 08:30:17;52.70;000101
################################################################################
# Оператор КИЕВСТАР
if [ "${oper}" = "KS" ]
then cat $opermsg | grep $num| grep USSD| grep 'Na rahunku'| sed -r 's/(: Na rahunku: | - | grn. )/;/g'| awk -F ";" '{print $1";"$4";"$3}' | tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор МТС
if [ "${oper}" = "MTS" ]
then cat $opermsg | grep $num| grep USSD| grep 'Na osobovomu rakhunku'| sed -r "s/(: Na osobovomu rakhunku | - |: avans |5 hrn.)/;/g"| awk -F ";" '{print $1";"$5";"$3}'| tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор Укртелеком
if [ "${oper}" = "UTEL" ]
then cat $opermsg | grep $num| grep USSD| grep 'Vash balans'| sed 's/,/./g'| sed "s/'//g"|sed -r "s/(: Vash balans:zagalnyi | - |; paketnyi )/;/g"| awk -F ";" '{print $1";"$4";"$3}'| tail -n $tn >>/tmp/tmpallbalans
fi
# Оператор Лайф
if [ "${oper}" = "LF" ]
then cat $opermsg | grep $num| grep USSD| grep ': Balans'| sed 's/,/./g'| sed -r 's/(: Balans | - |hrn. )/;/g'| awk -F ";" '{print $1";"$4";"$3}' | tail -n $tn >>/tmp/tmpallbalans
fi
################################################################################
Re: Не работает mysql-запрос в скрипте вызываемом cron'ом
Добавлено: 12 май 2012, 12:05
siv237
Обновил скрипт, теперь он умеет автоматически отключать модемы с низким балансом.