1

任何人都可以将“整整一周的工作”作为shell命令给我脚本。

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

我发现了一些有用的东西

startTime=$(date +%s) 

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

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

4 回答 4

4
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

也就是说,我认为您在这项工作中使用了错误的工具。拥有sleep7 天的脚本是非常不切实际的——在此期间可能会发生任何数量的事情,从系统重新启动到 shell 进程被杀死。

您应该查看crondand crontabatd甚至at查看更现代的cron变体/补充,例如frconanacron

于 2012-08-06T15:46:20.300 回答
1

请问为什么要睡1周?

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

1) 节省资源

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

而 cron 作业将在您希望它运行时准确运行,从而使您免于这种情况。一些有用的例子在下面的链接中

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

我之所以知道这一点,是因为我亲身经历过!:)

于 2012-08-09T16:20:06.527 回答
0

coreutils sleep支持d后缀,所以:

sleep 7d

会睡7天。

于 2012-08-06T09:22:59.080 回答
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
于 2012-08-06T16:01:02.193 回答