ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Не работает mysql-запрос в скрипте вызываемом cron'ом

Общие вопросы по операционной системе

Модераторы: april22, Zavr2008

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение SolarW » 08 май 2012, 13:09

Не, думаю Sfinx что-то другое имел в виду, просто перенаправлять я пробовал, цитирую первое сообщение темы
SolarW писал(а):Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение SolarW » 08 май 2012, 14:55

Ввел через 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;"
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение Vlad1983 » 08 май 2012, 19:10

попробовать заменить в этом выражении * на last_date,prt,md5,port,balans,time, а в первом на port,time,balans,delta
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение Sfinx » 09 май 2012, 05:46

SolarW писал(а):Не, думаю Sfinx что-то другое имел в виду, просто перенаправлять я пробовал, цитирую первое сообщение темы
SolarW писал(а):Прописывание запуска скрипта в кронтабе с выводом результатов в > /tmp/script.log тоже не диагностировало проблему.


Данное перенаправление не учитывает поток stderr, а 2>&1 указывает на добавление оного к log-выводу скрипта. В stderr программы выводят сообщения об ошибках, так как особенностью данного потока является полное отсутствие буферирования.
Rus

-----------
SfinxSoft
http://sfinxsoft.com
Аватар пользователя
Sfinx
 
Сообщений: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение Sfinx » 09 май 2012, 05:48

SolarW писал(а):
Sfinx писал(а):А последовать моему второму совету ?
Sfinx писал(а):Ну про проверку shell return code монитора я вообще молчу.

Учитывая что ручной запуск выполняется без ошибок что-то у меня сомнения в необходимости анализа кодов возврата.

Sfinx писал(а):Также не помешает вставка отладочной печати дабы убедиться что все переменные в скрипте ресолвятся верно.

Перед выполнением запроса через echo вывести переменные передающиеся запросу? Попробую но думаю что если бы они неправильно передавались mysql при запуске ругался бы какими-нибудь ошибками типа неправильный пароль или база данных...


Может он и ругается, но мы не видим stderr, а проверять return value не хотим, как бы клинч получается. Боюсь, я тут уже не помощник ;)
Rus

-----------
SfinxSoft
http://sfinxsoft.com
Аватар пользователя
Sfinx
 
Сообщений: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение siv237 » 10 май 2012, 10:50

Вот непонятно, зачем столько текста?
У человека скрипт запущенный в ручную из баша под 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
siv237
 
Сообщений: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение siv237 » 10 май 2012, 11:04

Vlad1983 писал(а):накой в файлы писать когда можно сразу из БД читать?

Был бы интересен пример того же самого на php с прямым запросом к базе.
siv237
 
Сообщений: 12
Зарегистрирован: 10 май 2012, 10:46

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение SolarW » 10 май 2012, 11:35

Блин!!!
Для кроновских заданий локаль другая, как я мог забыть...
Естественно что запросы в которых была кирилица не отрабатывались...
Путь и интерпретатор я проверил раньше (посмотрел echo $PATH и такой же прописал в кронтабе) а вот про локаль забыл.
Вывод - работает :-)
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение SolarW » 10 май 2012, 12:04

В качестве вклада в общее дело :-)

Код: выделить все
"  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

################################################################################
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Не работает mysql-запрос в скрипте вызываемом cron'ом

Сообщение siv237 » 12 май 2012, 12:05

Обновил скрипт, теперь он умеет автоматически отключать модемы с низким балансом.
siv237
 
Сообщений: 12
Зарегистрирован: 10 май 2012, 10:46

Пред.След.

Вернуться в Linux

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH