更改时区后,Cron作业不会启动


13

我试图消除许多常见错误,

  1. 确保PATH可用于cron

  2. 在crontab文件的末尾有一个结尾

  3. 时区通过以下方式设置:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

运行datebash,我得到:

Tue Sep 17 15:14:30 SGT 2013

为了检查cron是否使用同一时间,

* * * * * date >> date.txt

在date.txt中给出了相同的日期输出。

这是我要执行的脚本:

event.sh

#!/usr/bin/env bash
echo data > /root/data.txt

使用crontab -e,下面的行有效,

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

但是,当我尝试其他一些参数时,希望它能在下午2.50运行:

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

要么

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

它不再起作用。我的小时参数似乎有问题。在/tmp/debug.log文件中也找不到任何内容。

解:

原来,对TZ进行更改后,我必须重新启动cron服务。


1
日志中有任何错误?能否请您尝试使用绝对路径而不是~/event.sh尝试/home/username/event.sh
Rahul Patil

1
也可以做一些小的修改,例如* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Rahul Patil

1
您说时区设置正确,但是您绝对确定吗?尝试添加一个条目,例如,* * * * * date并确认它date显示了预期的时间。请注意,在crontab中设置TZ环境变量可能不会影响cron守护程序本身使用的时区,但是影响通过cron启动的进程,因此,如果您在crontab中设置TZ,建议您暂时将其注释掉并使用系统时钟的时区(如果您是单引导Linux,则可能是UTC,但可能是本地时间)来设置时间。
CVn 2013年

1
您错过了重点,@ adsisco。我要求您删除crontab中可能存在的任何TZ指令,然后重试。这将使日期与cron守护程序本身具有相同的TZ执行,让我们看到cron希望在哪个时区输入时间字段。/etc/localtime仅影响显示,而不影响系统时钟,我怀疑它会影响cron。通过执行此测试,我们可以确保您的问题与时区无关(坦白地说,这对我来说似乎是这样)。
CVn

1
实际上,我认为我只是通过重新启动系统来解决了它。...可能是在更改TZ之后必须重新启动cron服务吗?@MichaelKjörling。谢谢!为我指出可能的时区问题。
adsisco 2013年

Answers:


7

首先,你是打导致要误认为一个字段中的错误的可能性似乎非常低。这很可能是对正在发生的事情以及cron期望的误解。

在这种情况下,我们在对该问题的评论中发现这很可能是与时区相关的问题。为此,您将:

  • 将条目添加* * * * * date到crontab
  • 从crontab中删除(或注释掉)任何TZ任务

这将强制date以调用者的时区设置(即cron守护程序)运行。看一下输出;它将显示cron在内部使用的时区,因此很可能会在其时区中使用它。如果crontab中有TZ分配,则很可能将TZ环境变量分配传递给了调用的命令,但是cron本身使用其他时区。通过注释掉或删除TZ分配,可以避免这种歧义。

还要注意,对系统全局时区设置(包括/ etc / localtime)的任何更改几乎肯定至少需要重新启动cron守护程序,并且可能(尽管不太可能)重新启动系统才能完全生效。在crontab中编辑TZ分配应该不需要重新加载cron守护程序,因为它应该检测到文件已被更改并自动重新加载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.