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 的目的是:
- 检查您的 procedure_script 是否已经 "up & running"
- 执行 procedure_script 如果由于某种原因会停止
- 在 monitor_script 中插入一个 "if",例如:
如果 [ $DAYOFWEEK -eq 6 ] && [ $yourTimeVar == "14" ]; 然后
睡3小时
菲
问候
C
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 的目的是:
- 检查您的 procedure_script 是否已经 "up & running"
- 执行 procedure_script 如果由于某种原因会停止
- 在 monitor_script 中插入一个 "if",例如: 如果 [ $DAYOFWEEK -eq 6 ] && [ $yourTimeVar == "14" ]; 然后 睡3小时 菲
问候 C