#!/bin/sh #Execute at for menat. # version=0.1.3-pre3 wol_menat="menat-wol.sh-$version" wol_version=$wol_menat wol_exe_host=`hostname` exe_user=`id -un` ma_user=menat LANG=C user_h=/var/menat menat_conf=/etc/menat/menat.conf wol_conf=/etc/menat/wol.conf wol_log=/var/menat/localhost/menat/tmp/wol.log ma_wk="/sbin/ether-wake -i eth1" menat_mail=/var/menat/bin/menat-mail.sh wol_mail_txt=/var/menat/localhost/menat/tmp/wol.mesg n_time=`date '+%Y%m%d%H%M'` pn_time=`date '+%Y-%m-%d %a %H:%M'` wol_span_v="30minute" menat_wol_exe() { ma_wol_exe_v=0 while [ "$1" ];do case $1 in -F ) ma_wol_force=1 shift ;; -i ) shift ma_wol_str=$1 shift ;; * ) echo "$1, such option is not implemented." >&2 return 1 ;; esac done echo "ma_wol_str=$ma_wol_str" if [ "$ma_wol_str" ];then ma_wol_host=`echo $ma_wol_str|cut -d':' -f1` ma_wol_addr=`echo $ma_wol_str|cut -d':' -f2` ma_wol_mac=`echo $ma_wol_str|cut -d':' -f3-` conf_db=$ma_wol_str else echo "wol_host or wol_mac is not specified." >&2 return 1 fi menat_h=/var/menat/$ma_wol_host/menat menat_h_t=$menat_h/tmp if [ ! -f $wol_log ];then echo "new wol.log started by $ma_user from $wol_exe_host at $pn_time." >>$wol_log else echo >>$wol_log echo "$wol_menat was executed by $ma_user from $wol_exe_host at $pn_time." 2>&1 >>$wol_log fi dvn=`ping -q -w 1 -c 1 $ma_wol_host 2>&1 1>/dev/null`;vs_v=$? if [ $vs_v = 0 ];then if [ "$wol_debug" = 1 ];then echo "$ma_wol_host is running now, not need to wake up." else echo "$ma_wol_host is running now, not need to wake up." >&2 echo "$ma_wol_host is running now, not need to wake up." >>$wol_log fi return 0 fi if [ "$ma_wol_force" = 1 ];then m_title="the video server $ma_wol_host was WOLed by $wol_user." if [ "$wol_debug" = 1 ];then echo "$wol_user forced to wake video server $ma_wol_host on lan from $wol_exe_host at at $pn_time.
" echo "$ma_wk $ma_wol_mac;wol_exe_v=$?" wol_exe_v=0 else $ma_wk $ma_wol_mac;wol_exe_v=$? wol_mesg="$wol_user forced to wake the video server $ma_wol_host on lan from $wol_exe_host at $pn_time. $ma_wk $ma_wol_mac";wol_exe_v=$wol_exe_v echo "$wol_mesg" >>$wol_log echo "$wol_mesg" >$wol_mail_txt;msg_v=$? if [ $msg_v != 0 ];then wol_mail_txt=/tmp/wol.mesg echo "$wol_mesg" >$wol_mail_txt fi fi if [ $wol_exe_v = 0 ];then echo "the video server $ma_wol_host is forced to wake on lan." >>$wol_log pv=3 else echo "failed to force to wake $ma_wol_host on lan." >>$wol_log pv=4 fi $menat_mail -vs ${wol_exe_host%%.*} -a $ma_user -p $pv -n $wol_mail_txt -T "$m_title" return ${wol_exe_v:-0} else if [ ! -d /var/menat/$ma_wol_host/menat/ ];then echo "wol_host is not found." >&2 return 1 fi fi for t in /var/menat/$ma_wol_host/menat/*.mtq ;do if [ -d $t ];then continue fi tt=${t##*/} t_12=`echo $tt|cut -c 1-12` dvn=`expr $t_12 + 0 2>/dev/null`;dvn_v=$? if [ $dvn_v != 0 ]&&[ `echo $t_12|cut -c 1` != 0 ];then continue fi ma_t_Y=`echo $t_12|cut -c 1-4` ma_t_m=`echo $t_12|cut -c 5-6` ma_t_d=`echo $t_12|cut -c 7-8` ma_t_H=`echo $t_12|cut -c 9-10` ma_t_M=`echo $t_12|cut -c 11-12` ma_p_YmdHM="$ma_t_Y-$ma_t_m-$ma_t_d $ma_t_H:$ma_t_M" p_nxt_YmdaHM=`date -d "$ma_p_YmdHM" '+%Y-%m-%d %a %H:%M'` exp_prg_s=`date -d "$ma_t_Y-$ma_t_m-$ma_t_d $ma_t_H:$ma_t_M" '+%s'` exp_wol_s=`date -d ${wol_span_v} '+%s'` exp_wol_YmdHM=`date -d "-${wol_span_v} $ma_p_YmdHM" '+%Y-%m-%d %a %H:%M'` if [ "$wol_debug" = 1 ];then echo "next job $tt will be executed at $p_nxt_YmdaHM. maybe the time will expire at $exp_wol_YmdHM." else echo "next job $tt will be executed at $p_nxt_YmdaHM. maybe the time will expire at $exp_wol_YmdHM." >>$wol_log fi if [ $exp_wol_s -ge $exp_prg_s ];then if [ "$wol_debug" = 1 ];then echo "the time has come to wake on lan for the video server $ma_wol_host." echo "$ma_wk $ma_wol_mac;wol_exe_v=$?" wol_exe_v=0 else $ma_wk $ma_wol_mac;wol_exe_v=$? wol_mesg="the time has come to wake on lan for the video server $ma_wol_host. **** $pn_time **** wol_span_v=$wol_span_v $wol_menat" stn_ma_ex=`grep -n ^\#\!/ $t` stn_n=${stn_ma_ex%%:*} edn_ma_ex=`grep -n ^\$ $t` for t1 in ${edn_ma_ex:-0} ;do tt1=${t1%%:*} if [ $tt1 -gt ${stn_n:-0} ];then edn_n=$(($tt1-1)) break fi done iepg_dd=`$t -c iepg_dd 2` if [ ! "$iepg_dd" ];then stn_iepg=`sed -n "${stn_n:-0},${edn_n}p" $t|grep -c ^\#station` if [ "$stn_iepg" != 0 ];then for t1 in `grep -n ^\#station $t` ;do tt1=${t1%%:*} if [ $edn_n -gt $tt1 ];then stn_iepg_n=$(($tt1-1)) break fi done iepg_dd=`sed -n "${stn_iepg_n},${edn_n}p" $t` else iepg_dd=`sed -n "${edn_n}p" $t` fi wol_org_id=`$t -c org_id` wol_prs_id=`$t -c prs_id` wol_sr_id=`$t -c sr_id` wol_week_v=`$t -c week` wol_auto_exe=`$t -c auto_exe` wk_str="week=${wol_week_v:-0} ${wol_auto_exe:-0}" wol_iepg_err=`$t -c iepg_err` wol_iepg_err_v="iepg_err=${wol_iepg_err:--1}" cr_version="menat-cr.sh-`$t -c version`" iepg_dd="$iepg_dd #org_id=$wol_org_id:prs_id=$wol_prs_id:sr_id=$wol_sr_id; $wk_str; $wol_iepg_err_v; $cr_version " fi if [ $wol_exe_v = 0 ];then pv=3 wol_mesg="$wol_mesg $iepg_dd " else pv=4 wol_mesg="$wol_mesg but wol was faild. $iepg_dd $ma_wk $ma_wol_mac;wol_exe_v=$wol_exe_v " fi echo "$wol_mesg" >>$wol_log echo "$wol_mesg" >$menat_h_t/wol.mesg if [ $wol_exe_v = 0 ];then pv=3 m_title="Wake On LAN for $vs_hn." else pv=4 m_title="Wake On LAN for $vs_hn, failed." fi fi $menat_mail -vs $vs_hn -a $ma_user -p $pv -i ${tt:-/dev/null} -n $menat_h_t/wol.mesg -T "$m_title" if [ $wol_exe_v = 0 ];then echo "the video server $ma_wol_host is waken on lan." >>$wol_log else echo "failed to wake $ma_wol_host on lan." >>$wol_log fi else if [ "$wol_debug" = 1 ];then echo "but the time has never come yet." else echo "but the time has never come yet." >>$wol_log fi ma_wol_exe_v=0 fi ma_wol_exe_v=$((${ma_wol_exe_v:-0}+${wol_exe_v:-0})) if [ `wc -l <$wol_log` -gt 4096 ];then mv -f $wol_log $wol_log.1 echo "new wol.log started at `date '+%Y-%m-%d %a %H:%M'`." >>$wol_log echo >>$wol_log chmod -f 777 $wol_log fi break done return ${ma_wol_exe_v:-125} } if [ -f $menat_conf ];then . $menat_conf fi while [ "$1" ];do case $1 in -F ) wol_force="-F" shift ;; -c ) shift wol_conf=$1 shift ;; -e ) shift wol_span_v=$1 dvn=`date -d $1`;dvn_v=$? if [ $dvn_v != 0 ];then echo "maybe, $1 is invalid time span value." >&2 exit 1 fi shift ;; -a ) shift wol_addr=$1 shift ;; -h|-v|-vs ) shift wol_host=$1 shift ;; -m ) shift wol_mac=$1 shift ;; -u ) shift wol_user=$1 shift ;; -D ) wol_debug=1 shift ;; -x ) shift ma_wk=$1 shift ;; -V ) echo $wol_version exit 0 ;; * ) echo "$1, such option is not implemented." >&2 exit 1 ;; esac done conf_db=`cat $wol_conf|cut -d'#' -f1` if [ ! "$conf_db" ];then echo "$wol_conf is invalid." >&2 exit 1 fi if [ -d ${ma_wk%% *} ];then echo "$ma_wk is directory, not executable." >&2 exit 1 elif [ -f ${ma_wk%% *} ];then if [ ! -x $${ma_wk%% *} ];then echo "$ma_wk is not executable." >&2 exit 1 fi else echo "$ma_wk, such file is not found." >&2 exit 1 fi wol_user=${wol_user:-$exe_user} if [ "$wol_host" ]||[ "$wol_addr" ]||[ "$wol_mac" ];then conf_ok=0 for t in $conf_db ;do if [ "$wol_host" ];then wol_t_h=`echo $t|grep -c ^$wol_host` if [ $wol_t_h = 1 ];then wol_host_ok=1 fi else wol_t_h=1 fi if [ "$wol_addr" ];then wol_t_a=`echo $t|grep -c $wol_addr` if [ $wol_t_a = 1 ];then wol_addr_ok=1 fi else wol_t_a=1 fi if [ "$wol_mac" ];then wol_t_m=`echo $t|grep -c $wol_mac` if [ $wol_t_m = 1 ];then wol_mac_ok=1 fi else wol_t_m=1 fi if [ $(($wol_t_h+$wol_t_a+$wol_t_m)) = 3 ];then tmp_wol_host=`echo $t|cut -d':' -f1` tmp_wol_addr=`echo $t|cut -d':' -f2` tmp_wol_mac=${t#*:} tmp_wol_mac=${tmp_wol_mac#*:} conf_wol_str=$t conf_ok=1 break else continue fi done if [ "$conf_ok" != 1 ];then if [ "$wol_addr" ]&&[ "$wol_mac" ];then tmp_wol_addr=$wol_addr tmp_wol_mac=$wol_mac conf_ok=0 else if [ "$wol_host" ]&&[ "$wol_host_ok" != 1 ];then echo "$wol_host, such host is not found." >&2 fi if [ "$wol_mac" ];then echo "mac_address is not specified." >&2 else echo "wol_address is not specified." >&2 fi exit 1 fi else conf_ok=1 fi else conf_ok=1 fi if [ $conf_ok = 0 ];then if [ "$wol_debug" = 1 ];then echo "$ma_wk $tmp_wol_mac" echo "executed menat_wol at $pn_time." else wol_exe_mesg=`$ma_wk $tmp_wol_mac` if [ "$wol_exe_mesg" ];then echo "$wol_exe_mesg
" fi echo "$ma_wk $tmp_wol_mac" >>$wol_log echo "executed menat_wol at $pn_time." >>$wol_log fi else if [ "$conf_wol_str" ];then if [ "$wol_debug" = 1 ];then echo "menat_wol_exe $wol_force -i $conf_wol_str" fi menat_wol_exe $wol_force -i $conf_wol_str else for t in $conf_db ;do if [ "$wol_debug" = 1 ];then echo "menat_wol_exe $wol_force -i $t" fi menat_wol_exe $wol_force -i $t done fi fi exit 0