我正在运行一个运行ONCE或每周运行两次的shell脚本。 这个程序每天运行几个小时(取决于文件数量)..
但问题是,我必须在工作时间暂停这个程序.. 例如,如果工作时间是凌晨1点到凌晨3点,那么所有脚本工作应该暂停并等到凌晨3:01再次开始.. 如果它在凌晨1点之后运行,我不必杀死当前正在运行的进程。 但无论何时完成特定的FILE,我都必须暂停下一个文件..
目前这是我弄清楚的
while true
do
curr_time= date +"%H%M%S"
if [ $curr_time -ge 005000 -a $curr_time -le 030000 ]
then
echo "Pause for 12000 seconds"
sleep 12000
else
break;
fi
done
所以在12:50开始暂停,而不是希望一切都可以在凌晨1点之前暂停 然后睡12000秒,大约3个小时,然后重新启动..
但问题是如果出于某种原因,当它从12000秒睡眠中醒来并且还不是凌晨3点时,它将再睡12000秒。 我怎么能绕过这个?
我希望它在凌晨1点左右暂停(每个文件过程大约需要1分钟,但有几百到几千个文件需要处理)并在凌晨3点开始正常运行。 如果它在凌晨1点过去,我不必杀死它。只需在文件处理完毕后暂停。
答案 0 :(得分:0)
由于你的问题用bash标记,你可以使用算术扩展来睡眠所需的秒数。
sleep $(($(date -d 3:01 +%s) - $(date +%s)))
date -d 3:01 +%s
应该告诉自纪元以来的秒数,直到3:01,date +%s
从纪元到现在为止的秒数。
差异应该是您必须等到3:01的秒数。