【发布时间】:2015-05-08 12:48:07
【问题描述】:
我正在运行一个 shell 脚本,它每周运行一次或两次。 这个程序每天运行几个小时(取决于文件的数量)..
但问题是,我必须在工作时间暂停这个程序.. 例如,如果工作时间是凌晨 1 点到凌晨 3 点,那么所有的脚本工作应该暂停并等到凌晨 3:01 重新开始。 如果它在凌晨 1 点之后运行,我不必杀死当前正在运行的进程。 但是每当使用该特定文件时,我必须让它暂停下一个文件..
目前这是我想出来的
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:59 向它的 pid 发送一个 STOP 信号,在 3:01 向它的 pid 发送一个 CONT 信号?
-
仅供参考,我认为这个脚本不可能在当前状态下工作。
curr_time字符串变量不可能是-ge 245000和-le 030000。也许你的意思是-ge 005000? -
对不起,我编辑了这个问题.. 是的 00500.. 另外我怎样才能将最终结果发送到 pid ?为了做到这一点,我不需要知道 pid 吗?如果它一直在变化怎么办?