使用本地时区转换构建 Cronjob 文件时间戳语句

使用本地时区转换构建 Cronjob 文件时间戳语句

以下根 Crontab 作业用于每 15 分钟保存一次网页的定期时间戳副本。Ubuntu 16.04.2 LTS AMD64 云服务器全天候在线。日期函数显示的时间是 UTC。

*/15 * * * * /usr/bin/wget --convert-links --output-document=/home/user/Firefox/News-Headlines-$(date +\%Y-\%m-\%d_\%H:\%M:\%S).html www.news.tld

以下文件正在按预期保存:

News-Headlines-2017-04-11_02:15:01.html < Time in UTC

所需时间戳为 TZ=America/Detroit,当前为 -4 UTC

News-Headlines-2017-04-10_22:15:01.html < Time America/Detroit

问题

如何更改日期命令以生成带有 TZ=America/Detroit 时间戳的文件名?

News-Headlines-2017-04-10_22:15:01.html

笔记

我从时区列表中获得了时区的正确名称

en.wikipedia.org/wiki/List_of_tz_database_time_zones

我知道这些混合命令行可以从“date”命令中获取时间偏移日期。

Vanila date 命令输出

$ date
Mon Apr 10 20:52:29 UTC 2017

时移输出

$ TZ=America/Detroit date
Mon Apr 10 16:25:49 EDT 2017

我尝试过

*/15 * * * * /usr/bin/wget --convert-links --output-document=/home/user/Firefox/News-Headlines-$(TZ=America/Detroit date +\%Y-\%m-\%d_\%H:\%M:\%S).html www.news.tld

保存的时间戳不受影响:

News-Headlines-2017-04-11_02:15:01.html  < Time in UTC

答案1

在 root crontab 中对 date 命令进行了一些实验。据我观察,从 crontab 运行的 date 命令无法识别以下列出的所有时区指定:

en.wikipedia.org/wiki/List_of_tz_database_time_zones

使用基于 UTC 的时区指示符(而不是国家/城市格式指示符)重写原始帖子中引用的命令。

*/15 * * * * /usr/bin/wget --convert-links --output-document=/home/user/Firefox/News-Headlines-$(TZ=UTC4 date +\%Y-\%m-\%d_\%H:\%M:\%S).html www.news.tld

注意:无论使用 GMT 还是 UTC,结果都是相同的。

尽管使用时区指示符 UTC4 = UTC +4,但以下带有时间戳的文件名仍会以 -4 UTC 为时间戳。

# date
Tue Apr 11 18:34:36 UTC 2017

News-Headlines-2017-04-11_14:34:36.html

虽然该解决方案确实有效,但不明白为什么使用时区指示器 UTC4 = UTC +4 会导致 UTC -4 时间戳。

实验

使用 UTC -4 指示符会导致相反的结果:

$ wget --convert-links --output-document=/home/mark/Downloads/Firefox/FoxNews-Headlines-$(TZ=UTC-4 date +\%Y-\%m-\%d_\%H:\%M:\%S).html www.foxnews.com

# date
Tue Apr 11 18:50:08 UTC 2017

News-Headlines-2017-04-11_22:50:08.html

此时间戳比 UTC 早 4 小时,即 UTC-4 = UTC -4 。不明白为什么使用时区指示符 UTC-4 = UTC -4 会导致 UTC +4 时间戳。

答案2

TZ在 crontab 文件中全局设置环境变量是有效的:

firas@momiji ~ % cat /etc/cron.d/timestamp 
TZ=America/Detroit

* * * * * firas /usr/bin/wget --quiet --convert-links --output-document=/home/firas/News-Headlines-$(date +\%Y-\%m-\%d_\%H:\%M:\%S).html www.fkraiem.org
firas@momiji ~ % date
Wed Apr 12 04:49:20 JST 2017
firas@momiji ~ % TZ=America/Detroit date
Tue Apr 11 15:49:34 EDT 2017
firas@momiji ~ % ls News-Headlines-2017-04-11_15:4*
News-Headlines-2017-04-11_15:46:01.html  News-Headlines-2017-04-11_15:48:01.html
News-Headlines-2017-04-11_15:47:01.html  News-Headlines-2017-04-11_15:49:01.html

注意事项:

  • 以您自己的身份运行而不是以 root 身份运行wget,因为以 root 身份运行处理不受信任数据的任何程序通常都是危险的。
  • 运行wget--quiet抑制所有输出(否则通过电子邮件发送给用户)。

相关内容