在波兰 (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 秒)。