任何人都可以将“整整一周的工作”作为shell命令给我脚本。
在每次跑步睡觉之前,它应该计算下一周的日期和时间。
我发现了一些有用的东西
startTime=$(date +%s)
endTime=$(date -d "next week" +%s)
timeToWait=$(($endTime- $startTime)) sleep $timeToWait
任何人都可以将“整整一周的工作”作为shell命令给我脚本。
在每次跑步睡觉之前,它应该计算下一周的日期和时间。
我发现了一些有用的东西
startTime=$(date +%s)
endTime=$(date -d "next week" +%s)
timeToWait=$(($endTime- $startTime)) sleep $timeToWait
date -d "next week"
是另一种说法
date -d "7 days"
这意味着“从现在开始的 7 天”,这不是下周的开始,也可能不是您想要的。如果它是你想要的并且你正在使用GNU sleep
,你可以发出这个命令:
sleep 7d
让您的脚本休眠 7 天。如果您不使用 GNU sleep,则必须将 7 天间隔转换为秒:
sleep 604800
如果您想要下周的开始ksh
,那么这可能会有所帮助,甚至是bash
:
let time=`date -d "next monday" +%s`-`date +%s`
sleep $time
也就是说,我认为您在这项工作中使用了错误的工具。拥有sleep
7 天的脚本是非常不切实际的——在此期间可能会发生任何数量的事情,从系统重新启动到 shell 进程被杀死。
您应该查看crond
and crontab
,atd
甚至at
查看更现代的cron
变体/补充,例如frcon或anacron。
请问为什么要睡1周?
我问是因为如果你想让一个进程等待一周然后重试/做某事,cron 工作可能会更好。有两个原因 -->
1) 节省资源
2)如果由于某种原因您的系统必须重新启动/关闭 - 您的 shell 脚本将停止,您等待的任何事情都不会发生。
而 cron 作业将在您希望它运行时准确运行,从而使您免于这种情况。一些有用的例子在下面的链接中
http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/
我之所以知道这一点,是因为我亲身经历过!:)
coreutils
sleep
支持d
后缀,所以:
sleep 7d
会睡7天。
我警告不要长时间等待,我不会在等待时间为 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