通过cron(Ubuntu)调用的工作存在问题

时间:2019-06-11 12:28:17

标签: bash ubuntu cron

使用不同的时区致电at失败

我们有以下情况。所有服务器都在UTC中运行。 我们在美国有很多客户,而应用程序配置确定了要在EST中运行的作业。 (这意味着相对于夏令时而言,工作时间相对于UTC发生了变化,即,工作在相同的本地时间运行)。 我们面临的问题是,我们需要从cron调用另一个作业,该作业在应用程序作业之前运行一个小时。 此新作业将检查日期,如果日期部分与给定值匹配,它将运行其余代码,如果不匹配则退出。 (出于测试目的,今天是11日)

以下是脚本(BASH)代码段:

TODAY=$(date +%d)
echo ${TODAY}
if [[ "${TODAY}" == "11" ]]
then
echo "Today is last day of month" 
# run my job
else
echo "Today is not last day of month" 
fi

要使事情复杂化,我们的crontab中有以下内容:

TZ='America/New_York'

当我从控制台运行脚本时,请按如下所示记录日志条目:

11
Today is last day of month (as expected)

当我从cron安排脚本时,如下所示:

46 11 * * *  /opt/mytest.sh 

作业在世界标准时间11:46运行,日志输出如下:

11
Today is last day of month (as expected)

当我从cron安排脚本时,如下所示:

50 11 * * * at -f /opt/mytest.sh 07:51 (invoke at job to run at 7:51 est, ie 1151 utc)

作业在世界标准时间11:51写入日志,但是日志条目如下:

11
Today is not last day of month (not my expected result)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您在脚本中使用了许多bash扩展名。 at使用$SHELL的值来确定执行脚本所用的shell,并且在/bin/sh中它可能默认为cron。因此,请适当设置环境变量:

50 11 * * * SHELL=/bin/bash at -f /opt/mytest.sh 07:51 (invoke at job to run at 7:51 est, ie 1151 utc)