понедельник, 16 ноября 2009 г.

Спутниковое ТВ №6

запуск Гетстрима, автоматическое отлавливание ошибок типа:
вылет процесса, неактивность процесса, вещание нуля пидов...используется статистика вывода гетстрима

собсна сам скрипт запуска гетстрима+newcs+sascng:

#/home/nast/start
newcs.x86_64 &
sleep 5
insmod /win1/open-sasc-ng/r77/dvbloopback.ko num_adapters=3 &
sleep 5
/win1/open-sasc-ng/r77/sasc-ng -j 0:3 -j 1:4 -j 2:5 --cam-budget -b 20M --cam-dir /etc/camfiles/ &
/home/nast/getstream


расшифруем:

#/home/nast/getstream
sleep 11
nohup /win1/getstream/getstream2-20081204/start1 >start1.out &
sleep 11
nohup /win1/getstream/getstream2-20081204/start2 >start2.out &
sleep 11
/config_getstream/21 -dd &>getstream21.out &
nohup /win1/getstream/getstream2-20081204/start3 >start3.out &


соответсвенно сам хитрый скрипт, отлавливающий ошибки гетстрима:

#/win1/getstream/getstream2-20081204/start1
#!/bin/bash
progname='getstream1'
exec='/win1/getstream/getstream2-20081204/getstream1 -c /home/nast/config_getstream/3 -dd &'
mail='/home/nast/sendmail'
bag='inputstats: 0 pids 0 pkt/s 0 byte/s'
sleep_seconds=30
count=-1
cnt=0
cat /dev/null > /home/nast/bags.txt
while true; do
line=`ps -A | grep $progname` # Check program in processes list
line2=`tail /home/nast/start1.out | grep "$bag" -c`
if [ "$line" == "" ]; then
exec 3>&1 1>>/home/nast/bags.txt
echo "Process $progname is not started - starting"
exec 1>&3
count=$(($count+1))
$mail
$exec & # Start the program
else
line=`netstat -l -n -p 2>nul | grep $progname` # Check program opened at least one port
if [ "$line" == "" ]; then
echo "No listers for $progname - restart"
killall -I $progname # Restart the program
$exec & # Restart the program
fi
fi
if [ "$line2" -gt "3" ]; then
exec 3>&1 1>>/home/nast/bags.txt
echo "Process $progname is started - bags"
exec 1>&3
killall -I $progname # Restart the program
$exec & # Restart the program
exec 3>&1 1>>/home/nast/bags.txt
echo `date` "restarting..."
exec 1>&3
count=$(($count+1))
$mail
else
echo "Process $progname is started - nobags"
fi
sleep $sleep_seconds
if [ "$cnt" -gt 0 ]; then
# rm /home/nast/start1.out
# rm /home/nast/start2.out
# rm /home/nast/start3.out
cp /home/nast/warning /home/nast/start1.out; # Clear temp file "getstream"
cp /home/nast/warning /home/nast/start2.out; # Clear temp file "getstream"
cp /home/nast/warning /home/nast/start3.out; # Clear temp file "getstream"
# cat /dev/null > /home/nast/sasc.out; # Clear temp file "sasc-ng"
cnt=$((0))
# exec 3>&1 1>>/home/nast/start1.out
# echo `date` $cnt
# exec 1>&3
else
cnt=$(($cnt+1))
fi
exec 3>&1 1>>/home/nast/bags.txt
echo `date` "Error $progname = $count"
# echo $cnt
exec 1>&3
done

Реклама

Комментариев нет:

Отправить комментарий