![Shell 脚本在终端上工作,而不是在由 cronjob 运行时工作](https://linux22.com/image/105964/Shell%20%E8%84%9A%E6%9C%AC%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%8A%E5%B7%A5%E4%BD%9C%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%9C%A8%E7%94%B1%20cronjob%20%E8%BF%90%E8%A1%8C%E6%97%B6%E5%B7%A5%E4%BD%9C.png)
我面临着一个奇怪的情况,我进行了搜索但没有找到任何东西。我有一个 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"
到命令的开头,它会给出该错误!
非常奇怪的是,同一个命令在另一台机器上也有效!