我正在尝试设置一个 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,您可以采取更戏剧性的策略,更改TZ
cron 守护进程本身。停止/启动脚本中类似这样的内容:
# /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