在 IST 时间设置一个 cronjob

在 IST 时间设置一个 cronjob

我正在尝试设置一个 cronjob 在不同的时区运行。我用谷歌搜索了很多,发现编辑/etc/default/cron是可行的方法。但是这个文件已被弃用,我看到以下消息,所以我TZ=IST在文件中添加了/etc/init/cron.conf.我不确定这是否有效,请问有什么关于如何继续前进的建议吗?

# This file has been deprecated. Please add custom options for cron to
# /etc/init/cron.conf and/or /etc/init/cron.override directly. See
# the init(5) man page for more information

我在 Ubuntu Linux 上使用 cron 3.0pl1-120ubuntu4。

答案1

一个 cron 位于不同的 TZ 中

您可以尝试设置变量CRON_TZ而不是TZ.这些选项似乎是特定于发行版的。我查看了以下Fedora 和 Ubuntu 的手册页(man 5 crontab然后搜索)。TZ

Fedora 有它,CRON_TZ=IST而 Ubuntu 是这样声明的:

cron 守护进程以定义的时区运行。目前它不支持每用户时区。所有任务:系统和用户的任务将根据配置的时区运行。即使用户在其 crontab 中指定了 TZ 环境变量,这也只会影响 crontab 中执行的命令,而不影响 crontab 任务本身的执行。

Fedora 的手册页是这样描述的:

CRON_TZ 变量指定 cron 表特定的时区。用户应根据指定的时区在表中输入时间。用于写入日志文件的时间取自守护程序运行的本地时区。

鉴于你使用的是 Ubuntu,我不希望这能起作用,但它可能会起作用。我检查了 Ubuntu 12.10。

尝试这样的事情:

#m  h           d   m   wday    command
CRON_TZ=IST
5   0,6,12,18   *   *   *       /path/to/script.bash

所有 cron 都在不同的 TZ 中

然而,如果您的目标是在不同的时区运行所有 cron,您可以采取更戏剧性的策略,更改TZcron 守护进程本身。停止/启动脚本中类似这样的内容:

# /etc/init.d/crond
...
...
# Source function library.
. /etc/rc.d/init.d/functions

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

export TZ=IST
start() {
    if [ $UID -ne 0 ] ; then
        echo "User has insufficient privilege."
        exit 4
    fi
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon $prog $CRONDARGS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
}
...
...

这是来自我的 Fedora crond 停止/启动脚本的代码,但可以对 Ubuntu 的 crond 停止/启动脚本进行类似的更改。

答案2

没关系,但尝试将字符串“IST”放在引号中。

cron.conf/etc/default/cron

export TZ='IST'

另外,不要使用短名称,而是尝试使用长名称:

export TZ='Asia/Kolkata'

~/.profile或者如果你正在执行 crontabs,请将其放入你的

export TZ='Asia/Kolkata'

更改此守护程序的配置文件后,您需要重新启动它:

service cron restart

相关内容