#!/bin/sh version=0.2.2-pre7 is_name=$HOSTNAME rec_t=60 menat_dir=/var/menat/localhost/menat mk_log=/tmp/mkts.log dev_ex=${dev_ex:-2} l2p() { if [ $cap_exe = recpt1 ];then bs_p=$(($1/$((2*$dev_ex)))) bs_r=$(($1%$((2*$dev_ex)))) echo $(($((4*$(($bs_r/2))))+$(($bs_r%2))+$(($((1-$bs_p))*2)))) else echo $1:$1 fi return 0 } check_dev() { n_list="" if [ $dev_ex = 0 ];then . /etc/menat/menat.conf if [ $1 = bs ];then dev_max=$(($max_dev+1)) i=$st_dev else dev_max=$st_dev i=0 fi else if [ $1 = bs ];then dev_max=$((4*$dev_ex)) i=$((2*$dev_ex)) else dev_max=$((2*$dev_ex)) i=0 fi fi while [ $i -lt $dev_max ] ;do if [ "$n_list" ];then n_list="$n_list $i" else n_list=$i fi i=$(($i+1)) done m_check=0 mtq_list=`ls $menat_dir/*.mtq 2>/dev/null` if [ "$mtq_list" ];then for t in $n_list ;do t_ok=0 for m in $mtq_list ;do m=${m##*/} r_time=`date -d 1hour '+%Y%m%d%H%M'` m_time=${m:0:12} m_dev=${m:21:1} if [ ${m_dev} = $t ];then if [ $m_time -gt $r_time ];then t_ok=1 dev_num=$t else m_check=1 fi break fi done if [ $t_ok = 1 ];then break fi done if [ $m_check = 0 ];then echo ${n_list%% *} elif [ $t_ok = 1 ];then echo $dev_num m_check=0 fi else echo ${n_list%% *} fi if [ $m_check = 1 ];then echo "device is busy" >&2 rv=1 else rv=0 fi return $rv } rm_xml() { echo "*** rm_xml start ***" >>$mk_log rm_done="" exp_num=${exp_num:-30} exp_date=`date -d -${exp_num}day '+%Y%m%d%H%M'` rm_list=`ls ${epg_dir}epg.*.$1.xml* 2>/dev/null` for s in $rm_list ;do s_date=`echo $s |cut -d'.' -f2` if [ "${s_date//[0-9]/}" ]||[ ${#s_date} != 12 ];then continue fi if [ $s_date -lt $exp_date ];then rm -f $s if [ "$rm_done" ];then rm_done="$rm_done,${s##*/}" else rm_done=${s##*/} fi else break fi done if [ "$rm_done" ];then echo "rm list, $rm_done" >>$mk_log else echo "rm none" >>$mk_log fi echo "*** rm_xml end ***" >>$mk_log return 0 } err_mail() { err_date=`LANG=C date '+%Y-%m-%d %a %H:%M'` err_subj="EPG get error occured on $HOSTNAME in $1 at $err_date" err_mesg="$err_subj rep_max=$rep_max $2 $3 " m_server=${m_server:-localhost} m_user=${m_user:-$LOGNAME} m_password=${m_password:-.clpasswd} m_from=${m_from:-$LOGNAME@$HOSTNAME} m_to=${m_to:-root@$HOSTNAME} m_option=${m_option:-"-Z smtps"} clsmtpc -S $m_option -M $m_server \ -A auto -U $m_user -p $m_password \ -F $m_from -T $m_to \ -s "$err_subj" "$err_mesg" ;mv=$? if [ $mv = 0 ];then echo "error mail send, OK" >>$mk_log else echo "error mail send, FAILED by $mv" >>$mk_log fi return $mv } get_epg_ts() { if [ ! -f $ch_list ];then return 8 fi if [ ! -d $xml_dir ];then return 9 fi gev=0 cp_err=0 bs_ok=0 while read t ;do ph_ch=`echo $t |cut -d':' -f5` if [ ! "$ph_ch" ];then continue fi iepg_num=`echo $t |cut -d':' -f3` if [ ${ph_ch:0:2} = BS ];then if [ $bs_ok = 1 ];then continue fi ph_ch=BS01_0 dev_type=bs bc_type=bs epgdump_type="/BS" rec_t=${bs_rec_t:-240} rec_opt="--lnb 15" pref_dir=${xml_dir%%,*} pref_dir=${pref_dir%/} else dev_type=$ph_ch bc_type=$iepg_num epgdump_type=$iepg_num rec_t=${rec_t:-60} rec_opt="" pref_dir=${xml_dir%/} fi while [ loop ];do rec_dev_num=`check_dev $dev_type` ;rv=$? if [ $rv = 0 ];then if [ -f /etc/menat/cap.$rec_dev_num.conf ];then . /etc/menat/cap.$rec_dev_num.conf cap_exe_r="$exe $sid_opt" rec_dev=$videodev else rec_dev_num=`l2p $rec_dev_num` if [ $cap_exe = recpt1 ];then rec_dev=/dev/pt3video$rec_dev_num rec_dev_opt="--device $rec_dev --lnb 15" else rec_adp_num=${rec_dev_num%:*} rec_fe_num=${rec_dev_num#*:} rec_dev=/dev/dvb/adapter$rec_adp_num/frontend$rec_fe_num rec_dev_opt="--dev $rec_fe_num" fi cap_exe_r="$cap_exe $rec_dev_opt --b25 $sid_opt --strip" fi break else sleep 5m fi done epg_f=${epg_dir}epg.$xml_YmdHM.$bc_type re=0 re_m=0 epg_err=0 rec_v_error_c=0 ev_error_c=0 xv=64 unk_err_0="" unk_err_1="" check_merge_0="" check_merge_1="" rec_ss=`date +%s` while [ $re -lt $rep_max ];do re=$(($re+1)) rx_dateS=`date '+%Y-%m-%d %H:%M:%S'` echo "$cap_exe start $rec_t $ph_ch:$iepg_num :$rx_dateS: re=$re" >&2 echo "$cap_exe start $rec_t $ph_ch:$iepg_num :$rx_dateS: re=$re" >>$mk_log $cap_exe_r $ph_ch $rec_t $epg_f.ts ;rec_v=$? echo "$cap_exe_r $ph_ch $rec_t $epg_f.ts ;rec_v=$rec_v :re=$re" >>$mk_log if [ $rec_v = 0 ];then epgdump $epgdump_type $epg_f.ts $epg_f.xml.e ;ev=$? grep -v "^--" $epg_f.xml.e >$epg_f.xml echo "epgdump $epgdump_type $epg_f.ts $epg_f.xml ;ev=$ev" >>$mk_log if [ $ev = 0 ];then re_m=$(($re_m+1)) $check_xml $epg_f.xml >>$mk_log 2>&1 ;xv=$? echo "check_xml.sh $epg_f.xml ;xv=$xv :re=$re" >>$mk_log if [ $xv = 0 ];then break else cp $epg_f.xml /tmp/${epg_f##*/}.$re.xml unk_err=`$check_xml -x $epg_f.xml 2>&1` if [ "$unk_err" = "$unk_err_0" ];then if [ "$unk_err" = "$unk_err_1" ];then echo "check_xml.sh $epg_f.xml ;xv=00 :ep_max=3 :re=$re" >>$mk_log xv=0 break else unk_err_1=$unk_err fi else unk_err_0=$unk_err fi if [ $re_m -gt 1 ];then merge_f=`$merge_xml /tmp/${epg_f##*/}.*.xml` ;mer_v=$? if [ $mer_v = 0 ];then echo "merge success: cp $merge_f $epg_f.xml; mer_v=0" >>$mk_log cp $merge_f $epg_f.xml xv=0 break else check_merge=`$check_xml -x $merge_f 2>&1` if [ "$check_merge" = "$check_merge_0" ];then if [ "$check_merge" = "$check_merge_1" ];then echo "merge rep_max filled :$merge_f mer_v=$mer_v ;xv=00 :re=$re" >>$mk_log cp $merge_f $epg_f.xml xv=0 break else check_merge_1=$check_merge fi else check_merge_0=$check_merge fi echo "merge failed :$merge_f mer_v=$mer_v :re=$re" >>$mk_log fi fi fi else ev_error_c=$(($ev_error_c+1)) epg_err=$(($epg_err|2)) fi else rec_v_error_c=$(($rec_v_error_c+1)) epg_err=$(($epg_err|1)) fi done if [ $dev_type = "bs" ];then bs_ok=1 fi if [ $xv = 0 ];then pre_xml=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -1` if [ "$pre_xml" ]&&[ $pre_xml != $epg_f.xml ];then pre_xml_YmdHM=`echo ${pre_xml##*/} |cut -d'.' -f2` ood_YmdHM=`date -d -7day '+%Y%m%d%H%M'` if [ $pre_xml_YmdHM -gt $ood_YmdHM ];then cp $pre_xml /tmp/ pre_xml=/tmp/${pre_xml##*/} merge_f=`$merge_xml $epg_f.xml $pre_xml` merge_f=`$trim_xml $merge_f` if [ $merge_f != $epg_f.xml ];then cp $merge_f $epg_f.xml fi fi fi else epg_err=$(($epg_err|4)) gev=$(($gev|$epg_err)) if [ $re_m != 0 ];then pre_xml=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -1` merge_f=`$merge_xml /tmp/${epg_f##*/}.*.xml $pre_xml` ;mer_v=$? if [ $mer_v = 0 ];then echo "merge success with $pre_xml: cp $merge_f $epg_f.xml :re=$re ;mer_v=0" >>$mk_log echo "ERROR xv=$xv revised and error mail was stopped." >>$mk_log else echo "merge failed with $pre_xml: $merge_f re=$re ;mer_v=$mer_v" >>$mk_log err_mail $epg_f.xml "ev=$ev: xv=$xv" "rec_dev=$rec_dev:$bs_t" fi merge_f=`$trim_xml $merge_f` cp $merge_f $epg_f.xml else n=0 while [ $n -lt 8 ];do n=$(($n+1)) pre_xml_list=`ls $pref_dir/epg.*.$bc_type.xml 2>/dev/null |tail -$n` pre_xml=`echo "$pre_xml_list" |head -1` if [ "$pre_xml" ];then if [ -s $pre_xml ]&&[ $pre_xml != $epg_f.xml ];then echo "${0##*/} :cp $pre_xml $epg_f.xml :n=$n" >>$mk_log cp $pre_xml $epg_f.xml break fi else echo "no xml file found, $epg_f.xml" >>$mk_log fi done err_mail $epg_f.xml "ev=$ev: xv=$xv" "rec_dev=$rec_dev:$bs_t" fi fi if [ "$xml_dir" ];then for c in ${xml_dir//,/ } ;do if [ ! -f ${c%/}/$epg_f.xml ];then i=0 cp_err=8 while [ $i -lt 3 ];do cp $epg_f.xml $c ;cv=$? if [ $cv = 0 ];then cp_err=0 break else cp_err=8 if [ -d $xml_dir ];then cp_err_mesg="$xml_dir=1" else cp_err_mesg="$xml_dir=0" fi cp_err_mesg="cp_err :$cp_err_mesg :cv=$cv" ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'` echo "$cp_err_mesg :$ex_date" >>$mk_log xml_dir_stat=`timeout 3 df $xml_dir |tail -n 1` if [ "$xml_dir_stat" ];then echo "$xml_dir_stat" >>$mk_log else timeout 3 df >>$mk_log fi sleep 60 i=$(($i+1)) fi done else cp_err=0 fi gev=$(($gev|$cp_err)) done else gev=$(($gev|16)) fi if [ $rm_ok = 1 ];then rm $epg_f.ts fi if [ $rm_xml_ok = 1 ];then rm_xml $bc_type fi rec_es=`date '+%s'` rec_ts=$(($rec_es-$rec_ss)) rec_tm=$(($rec_ts/60)) rec_rs=$(($rec_ts%60)) echo "*** end $iepg_num re=$re xv=$xv, rec_v_ec=$rec_v_error_c, ev_ec=$ev_error_c, ${rec_tm}m${rec_rs}s ***" >>$mk_log echo >&2 done <<EOF `grep -v ^\# $ch_list` EOF return $gev } rm_ok=0 rm_xml_ok=0 rep_max=5 check_xml=/rita/scripts/check_xml.sh merge_xml=/rita/scripts/merge_xml.sh trim_xml=/rita/scripts/trim_xml.sh epg_dir="" if [ -f /etc/iepgd.conf ];then . /etc/iepgd.conf fi if [ -f .iepgd.conf ];then . $PWD/.iepgd.conf fi if [ ! "$cap_exe" ];then cap_exe=recpt1 fi is_root=${is_root:-/var/www/html/} ch_list=${1:-ch.list} xml_dir=${2:-$xml_dir} if [ "$epg_dir" ];then epg_dir=${epg_dir%/}/ fi echo >>$mk_log xml_YmdHM=`date '+%Y%m%d%H%M'` ex_ss=`date +%s` ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'` echo "mkts2xml.sh-$version, start at $ex_date" >>$mk_log echo ch_list=$ch_list: xml_dir=$xml_dir >>$mk_log if [ "$mopt_exe" ];then $mopt_exe fi get_epg_ts ;gv=$? ex_es=`date +%s` ex_ts=$(($ex_es-$ex_ss)) ex_tm=$(($ex_ts/60)) ex_rs=$(($ex_ts%60)) ex_date=`LANG=C date '+%Y-%m-%d %a %H:%M'` echo "mkts2xml-$version, ${ch_list##*/}, end by $gv at $ex_date, ${ex_tm}m${ex_rs}s" >>$mk_log exit $gv --- txt.cgi-0.1.5