Проблема вроде обычная для крона и начинающих - вручную запускаю скрипт все ОК, из крона не ок. Сам скрипт вот:
Код: Выделить всё
#!/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 соединений астериска, дальше в этом списке ищутся только те которые относятся к провайдеру. Главная цель их просто посчитать и записать результат в файлик, простая задача, столько хлопот(