Shell 脚本在终端上工作,而不是在由 cronjob 运行时工作

Shell 脚本在终端上工作,而不是在由 cronjob 运行时工作

我面临着一个奇怪的情况,我进行了搜索但没有找到任何东西。我有一个 bash 脚本,它获取日期并添加 72 小时。当我从终端运行它时没有问题,但是当它通过 cronjob 运行时它给了我一个错误:

if [ $# -eq 3 ] ; then

# ----------
# PARAMETERS
# ----------
start_YYYYMMDDHH=${1}
ini_YYYYMMDDHH=${2}
flen=${3}
ini_HH=${ini_YYYYMMDDHH:8:2}
start_YYYY=${start_YYYYMMDDHH:0:4}
start_MM=${start_YYYYMMDDHH:4:2}
start_DD=${start_YYYYMMDDHH:6:2}
start_HH=${start_YYYYMMDDHH:8:2}
start_II=00
start_SS=00
end_YYYYMMDDHH=`date --utc +%Y%m%d%H%i%s -d "${start_YYYY}-${start_MM}-${start_DD} ${start_HH}:${start_II}:${start_SS} UTC +${flen} hours"`
end_YYYYMMDDHH=${end_YYYYMMDDHH:0:10}
end_YYYY=${end_YYYYMMDDHH:0:4}
end_MM=${end_YYYYMMDDHH:4:2}
end_DD=${end_YYYYMMDDHH:6:2}
end_HH=${end_YYYYMMDDHH:8:2}
end_II=00
end_SS=00

当我通过 cron 运行它时,它给了我这个错误:

日期:额外的操作数“-d”尝试“date --help”以获取更多信息。

你知道为什么会发生这种情况吗?

答案1

当 cron 运行时,您有不同的路径设置,因此请始终在 cron 脚本或服务中使用绝对路径。

答案2

我找到了解决方案:

end_YYYYMMDDHH=$(date --date="${start_YYYY}-${start_MM}-${start_DD} ${start_HH}:${start_II}:${start_SS} UTC +${flen} hours" -u "+%Y%m%d%H")

它工作正常,但由于某种原因,如果您将这部分移动-u "+%Y%m%d%H"到命令的开头,它会给出该错误!

非常奇怪的是,同一个命令在另一台机器上也有效!

相关内容