如何设置 crontab 的时区?

如何设置 crontab 的时区?

我已经设置了 ACPI 唤醒,这样我的笔记本电脑每天早上都会在某个时间唤醒。时区是 UTC。我想使用 UTC 设置我的 crontab,以便它们与唤醒闹钟相符。

你怎么做呢?

我尝试进行编辑/etc/default/cron以包括:

TZ="UTC"

但它不起作用。(我也试过TZ=UTCTZ="UTC/GMT"

有任何想法吗?

答案1

我在 Trusty (14.04) 上遇到了类似的问题。通过设置机器的时区然后重新启动cron服务解决了这个问题

  1. sudo dpkg-reconfigure tzdata- 按照说明选择地区/国家
  2. sudo service cron restart
  3. timedatectl- 验证您的日期设置

答案2

没有简单的方法可以实现这一点。cron 使用本地时间。/etc/default/cron并且TZcrontab 中的其他规范仅指定TZ应为 cron 启动的进程使用什么,它不会影响启动时间。

我见过的大多数解决方案都涉及中间的一个实用程序,因此 cron 会启动某些东西,然后确定何时以 UTC 启动(例如,如果您知道您只关心 DST 变化,则在 2 小时前启动它,计算时差,然后启动它。看一下at。为此,人们经常使用perlpython或类似的脚本语言)。

如果您愿意,有一种卑鄙的方法来破解它。 cron 仅在启动时从系统读取 TZ 信息。 因此,如果这是一个一直运行的服务器,您只需将 TZ 设置为 UTC,重新启动,然后在启动后将其设置为您的本地时区。 您也可以编写脚本。

作为一种替代方法,还可以看看@rebootcron 的语法,它应该在启动后执行脚本,这听起来像您想要的。

答案3

有一个控制系统时区的文件..我刚刚遇到了同样的问题,解决方案如下:

如果您没有手动配置任何时区,运行date应该显示 UTC 时间。

  • 创建备份

    sudo cp /etc/localtime /etc/localtime.bkp
    
  • 删除文件:

    sudo rm /etc/localtime
    
  • 我住在芝加哥,(您可能需要更改路径,使用 Tab 键有帮助)所以:

    sudo ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
    
  • 然后重启。系统启动时执行:date

  • 现在您的时区应该在那里,并且 cron 将会查看它。

仅供参考:设置 TZ 变量是一个临时解决方案,有时可能充当“掩码”。

答案4

好的,我花了一些时间弄清楚了如何在 Ubuntu Natty 上做到这一点,下面是我让它工作的方法。可能有更优雅的方法,但这种方法可行。

首先,我们需要将 cron 可执行文件包装在设置 TZ 变量的 shell 中。操作如下:

cd /usr/sbin
mv cron cron.real

然后,创建一个新的 /usr/sbin/cron 文件。我使用了 vim,但您可以使用任何您想要的编辑器,只需使文件看起来像这样:

#!/bin/bash
export TZ=UTC
/usr/sbin/cron.real

使新的 cron 文件可执行:

chmod ugo+rx cron

现在,重新启动 cron 守护进程:

service cron restart

您的 cron 作业现在将按照基于 UTC 的时间表运行 - 但是,即使执行时间是 UTC,运行时它们的时区仍将设置为系统定义的时区。要更改此设置,请在 crontab 中的任何命令之前添加以下内容:

TZ=UTC

因此你的 crontab 将会是这样的:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
TZ=UTC
00 19 * * * date > /tmp/date.log

相关内容