unix 脚本应该 运行 工作日(周一至周六)和周日(9-14 和 17-21 小时)的 9-21 小时。它在oracle中执行一个过程

unix script should run 9-21 hrs on weekdays (mon-sat) and on sunday (9-14 and 17-21hrs). It executes a procecudure in oracle

    START_DATE=`date '+%d%m%Y%H%M%S'`
DAYOFWEEK=$(date +"%u")
START_HOUR=$(date +"%H")


run_dt=`date '+%d%m%Y'`
run_hr=`date '+%H%M'`
echo 'run_hr' $run_hr

echo 'Shell script started'
echo ${START_DATE}
echo ${DAYOFWEEK}
echo ${START_HOUR}

while [ $run_hr -lt 21];
do
if [ $DAYOFWEEK = 1 ] || [ $DAYOFWEEK = 2 ] || [ $DAYOFWEEK = 3 ] || [ $DAYOFWEEK = 4 ] || [ $DAYOFWEEK = 5 ] || [ $DAYOFWEEK = 6 ]; then
echo 'inside while'

sqlplus -s xx/abcd<< END2
set timing on; 
select to_char(sysdate,'dd-mm-yyyyhh24:mi') starttime from dual;
#exec my_proc();
select to_char(sysdate,'dd-mm-yyyyhh24:mi') endtime from dual;
END2

sleep 120
let run_hr=`date '+%H%M'`
echo 'run_hr' $run_hr

elif [ $DAYOFWEEK = 7 ]; then
echo 'inside while on sunday'
sqlplus -s xx/abcd<< END2
set timing on; 
select to_char(sysdate,'dd-mm-yyyyhh24:mi') starttime from dual;
#exec my_proc();
select to_char(sysdate,'dd-mm-yyyyhh24:mi') endtime from dual;
END2

sleep 120
if [ $run_hr -eq 14 ]; then
sleep 10800else
let run_hr=`date '+%H%M'`
echo 'run_hr' $run_hr
echo 'Nothing'
fi
else
echo 'off'
fi
done

echo 'Exiting'

通过保持在 while 循环中,proc 每次都会在早上 9 点由 cron 启动来运行。但在周日,我必须在 14:00 小时保持 3 小时睡眠。 你能告诉我如何让它在星期天睡 3 个小时吗? 提前感谢您的帮助!

您可以尝试创建另一个脚本(如监控脚本)来执行您发布的脚本: monitor_script:放在crontab里,每分钟执行一次 procedure_script: 你的脚本

monitor_script 的目的是:

  1. 检查您的 procedure_script 是否已经 "up & running"
  2. 执行 procedure_script 如果由于某种原因会停止
  3. 在 monitor_script 中插入一个 "if",例如: 如果 [ $DAYOFWEEK -eq 6 ] && [ $yourTimeVar == "14" ]; 然后 睡3小时 菲

问候 C