0

基本上,我有一系列命令,我想每隔一个星期天运行一次。我设置了一个 cron 任务来每周日运行脚本,然后这个脚本只允许脚本在偶数周运行,因此它每隔一个星期天运行一次。我的问题是,这个脚本还会年复一年地工作吗?

if [ $(($(date +'%U') % 2)) -eq 0 ]
then
  some command
fi
4

2 回答 2

2

这里有所谓的XY 问题

您的 shell 脚本的这一部分有问题,您想通过修复脚本来解决问题。实际上,解决问题的根本原因更容易。

只需将您的 cron 作业更改为每隔一个星期日运行一次:

#----+-----+-----+-----+-----+-------------------------------------------------
#min |hour |day  |month|day  |command
#    |     |of mn|     |of wk|
#----+-----+-----+-----+-----+-------------------------------------------------
03    04    *     *     7     expr `date +%W` % 2 >/dev/null || fortnightly.sh

请参阅如何指示 cron 每两周执行一次作业?了解更多信息。

于 2013-05-02T02:46:46.257 回答
1

如果您不想用cron语法指定它,您可以使用%s格式而不是%U. 这将为您提供自 1970 年 1 月 1 日 UTC 以来的秒数。您可以将其划分为周数:

$(($(date +'%s') / 604800))

然后你可以对它进行模数测试。

注意数字,604800 = 7 * 86400 = 7 * 24 * 60 * 60 一周内的秒数。

如果你每天都运行这个,你会想知道它实际上是一个星期天。因此,在这种情况下,您将除以 86400 以获得日期数。然后,在知道第 0 天是星期四的情况下,您可以检查结果(模 14)是 3 还是 10,具体取决于您从哪个星期日开始。

于 2013-05-02T02:54:21.117 回答