用于睡眠1周的shell脚本

时间:2012-08-06 07:21:34

标签: unix ksh unix-timestamp

任何人都可以给我一个'整周睡一觉'的脚本作为shell命令。

在每次跑步中睡觉之前,应该计算下周的日期和时间。

我找到了一些有用的东西

startTime=$(date +%s) 

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

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

4 个答案:

答案 0 :(得分:4)

date -d "next week"

是另一种说法

date -d "7 days"

这意味着“从现在起七天”,下周的开始,也可能不是你想要的。如果您想要的并且您使用GNU sleep,则可以发出以下命令:

sleep 7d

让你的脚本睡七天。如果您不使用GNU睡眠,那么您必须将七天间隔转换为秒:

sleep 604800

如果您想要下周的开始,那么这可能会对kshbash中的帮助有所帮助:

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

那就是说,我认为你正在使用错误的工具来完成这项工作。拥有一个脚本sleep七天是非常不切实际的 - 从系统重启到shell进程被杀死的任何时候都会发生任何事情。

您应该查看crondcrontabatdat,或者查看更现代的cron变体/补充内容,例如{{3 }或frcon

答案 1 :(得分:1)

我可以问你为什么要睡一周?

我问,因为如果你想让一个进程等待一周然后重试/做某事,那么cron job可能会更好。有两个原因 - >

1)节省资源

2)如果由于某种原因你的系统必须重新启动/关闭 - 你的shell脚本将停止,你不会发生任何事情。

而cron作业将在您希望它运行时完全运行,从而避免出现这种情况。一些有用的例子在下面的链接中

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

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

答案 2 :(得分:0)

coreutils sleep支持d后缀,所以:

sleep 7d

将睡7天。

答案 3 :(得分: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