任何人都可以给我一个'整周睡一觉'的脚本作为shell命令。
在每次跑步中睡觉之前,应该计算下周的日期和时间。
我找到了一些有用的东西
startTime=$(date +%s)
endTime=$(date -d "next week" +%s)
timeToWait=$(($endTime- $startTime)) sleep $timeToWait
答案 0 :(得分: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进程被杀死的任何时候都会发生任何事情。
您应该查看crond
和crontab
,atd
和at
,或者查看更现代的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