Страница 1 из 1

cron выполняет только часть скрипта

Добавлено: 2012-09-04 20:53:56
Avendeil
Приветствую!
Проблема вроде обычная для крона и начинающих - вручную запускаю скрипт все ОК, из крона не ок. Сам скрипт вот:

Код: Выделить всё

#!/bin/sh

TIMENAME=`date +%d.%m.%Y-%H.%M`

Count=0
asterisk -rx "sip show channels" | while read line
do
cutline=$(echo $line | cut -c1-10)
 if [ "$cutline" = "ip adress" ];  then
   Count=`expr ${Count} + 1`
   echo "Sessions: $Count Date: $TIMENAME" > /tmp/countpeterstarfile
 fi
done
cat /tmp/countpeterstarfile >> /var/log/SipSessions.log
rm /tmp/countpeterstarfile
Выполняется только то что находится не в теле цикла.
Поясню почему используется файл /tmp/countpeterstarfile. Изначально просто использовалась переменная Count, но это вызвало довольно забавное явление, после выхода из цикла переменной возвращалось то значение, которое у нее было до цикла. Гугл подсказал что это вызвано использованием канала из за которого запускается дочерний процесс в котором и выполняется цикл. Все встало на свои места, но пришлось использовать файл для хранения переменной. Скрипт заработал при ручном выполнении. Все радуются. Ага. Щаз.
Крон судя по всему не позволяет запустить дочерний процесс. Можно это как то урегулировать? Или переписывать скрипт без использования pipe?
Спасибо!


ps: небольшие пояснения по скрипту: asterisk -rx "sip show channels" выводит список активных SIP соединений астериска, дальше в этом списке ищутся только те которые относятся к провайдеру. Главная цель их просто посчитать и записать результат в файлик, простая задача, столько хлопот(

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-04 21:42:36
шёл_мимо
Avendeil писал(а): asterisk -rx "sip show channels" | while read line
Полный путь до asterisk'а пропиши.

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-04 22:04:51
Avendeil
та не, эта часть работает отлично, проверено проблем нет.

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-04 22:32:44
шёл_мимо
Avendeil писал(а):та не, эта часть работает отлично, проверено проблем нет.
Если не выполняется, значит путь не найден или писать полный путь или в .profile добавить пути(PATH)
Покажи строку крона.

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-04 22:36:30
Avendeil

Код: Выделить всё

*/5     *          *       *       *       /usr/bin/myscrips/countpeterstarconntections.sh
До того как просто забыл поставить последнюю строчку в скрипте, т.е. не удалялся временный файл, и в итоговый записывалось всегда одно и то же. То что осталось с последнего запуска из консоли.
В кроне еще много чего, бекапы, чистка директорий, конвертирование и тд и тп, все роблет.

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-05 7:15:34
шёл_мимо
А так?

Код: Выделить всё

*/5     *          *       *       *   root    /usr/bin/myscrips/countpeterstarconntections.sh

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-05 8:35:04
chipset
крон пробуй рутовый использывать, а так же пути лучше полные проблем меньше будет

Re: cron выполняет только часть скрипта

Добавлено: 2012-09-05 20:48:15
Avendeil
крон и так рутовый. Но вообще прописал полные пути, выдал везде права 777, были права 755 и заработало. Чо это так было не понял. Но на будущее учту про использование в скриптах крона всегда полных путей.