2012-08-06 89 views
1

任何人都可以给我脚本来作为“睡眠整个星期的工作”作为shell命令。用于睡眠1周的shell脚本

在每次运行睡觉之前,它应该计算下一周的日期和时间。

我找到了这是

startTime=$(date +%s) 

endTime=$(date -d "next week" +%s) 

timeToWait=$(($endTime- $startTime)) sleep $timeToWait 
+0

哪部分不是有用的?换句话说,什么不适合你? – rene 2012-08-06 07:23:29

+0

calculatinf下周 – user1403174 2012-08-06 07:24:31

+0

睡1周或睡觉,直到下周开始? – 2012-08-06 07:24:52

回答

0

coreutilssleep支持d后缀所以有点有用:

sleep 7d 

会睡7天。

4
date -d "next week" 

是一种不同的方式来表达

date -d "7 days" 

这意味着“由七天现在”,这是下一周的开始,它也可能不是你想要的。如果你想要什么,你正在使用GNU sleep,你可以发出此命令:

sleep 7d 

有你的脚本睡了七天。如果你不使用GNU的睡眠,那么你将有七天的时间间隔转换成秒:

sleep 604800 

如果你想开始下一周的,那么这可能在ksh有所帮助,或即使在bash

let time=`date -d "next monday" +%s`-`date +%s` 
sleep $time 

这就是说,我认为你使用这个工作是错误的工具。有一个脚本sleep七天是非常不切实际的 - 从系统重启到shell进程被杀死的同时,可能会发生许多事情。

你应该看看crondcrontabatdat,甚至在更现代cron株/补充剂,如frconanacron

0

我警告过一次长时间的等待,我不会在1周的等待时间内完成这个任务。 但是我用的这个变化过去:

waittime= 
interval= 

: ${waittime:?specify wait time in seconds} 
: ${interval:?specify interval in seconds} 

t0=SECONDS 
target=$((t0 + waittime)) 

until 
    ((SECONDS > target)) 
do 
    sleep $interval 
done 
1

我可以问你为什么需要1周的睡眠?

我问,因为如果你想要一个进程等待一个星期,然后重试/做某件事,cron工作可能会更好。有2个原因 - >

1)节约资源

2)如果由于某种原因,你的系统必须重新启动/停机 - 你的shell脚本将会停止,无论你在等待不会发生。

虽然cron作业将在您希望运行的时候正好运行,从而避免出现这种情况。一些有用的例子是在下面的链接

http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

我了解到这一点,因为我经历过它自己! :)

+0

感谢man ....提供cron作业 – user1403174 2012-09-07 14:06:01