不同时区的 crontab 和 DST 不一致

不同时区的 crontab 和 DST 不一致

在波兰 (UTC +01:00) 托管的服务器上,有没有办法可以始终在纽约时间上午 9 点 (UTC -05:00) 运行 crontab 条目?

对我来说,这并不是一件小事,因为波兰的夏令时于上周日结束,所以我计划在一年中大部分时间在当地时间 15:00 运行的作业从美国证券交易所。

我记得几年前国会决定延长夏令时,这使得每年有几周时间不同步。

我什至不确定是否有效的一种解决方法(无论如何我宁愿避免)是当我有一项任务时:

0 14 * * * something

我获取纽约的时间TZ=":US/Eastern" date +%s并使用 bash 算术比较我是否应该sleep 3600在运行之前something

答案1

如果它只有一项工作,你可以使用这样的克鲁格:

# MM HH        DM MN DW   CMD
  0  *         *  *  *    TZ=':America/New_York'; if [ `date +\%H` -eq 9 ]; then actual-command-here; fi

我认为你可以像在 crontab 中那样设置环境变量,如果不只是将整个事情放在一个sh -c或一个 shell 脚本中......

我有一个 cron 作业,需要每隔一周运行一次,我使用类似的 kluge 来执行。

答案2

好吧,由于更改 TZ 环境date似乎确实会在 Ubuntu 中调用正确的当前时间,因此这至少是一种解决方法(我试图不依赖的方法):

SHELL=/bin/bash

0 14 * * 1-5  [ $[10#$(date +\%H) - 10#$(TZ=":US/Eastern" date +\%H)] == 5 ] || sleep 3600; w;df

w;df因此,该计划的目标是在周一至周五东部时间上午 9 点运行。我把 15 小时改为 14 小时,在运行进一步的命令之前可以休眠一小时(3600 秒)。

相关内容