Shell脚本时间控件

时间:2015-03-06 20:11:52

标签: linux bash shell unix

我正在运行一个运行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点过去,我不必杀死它。只需在文件处理完毕后暂停。

1 个答案:

答案 0 :(得分:0)

由于你的问题用bash标记,你可以使用算术扩展来睡眠所需的秒数。

sleep $(($(date -d 3:01 +%s) - $(date +%s)))

date -d 3:01 +%s应该告诉自纪元以来的秒数,直到3:01,date +%s从纪元到现在为止的秒数。

差异应该是您必须等到3:01的秒数。