以下根 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
抑制所有输出(否则通过电子邮件发送给用户)。