쉘 스크립트는 cronjob에 의해 실행될 때가 아니라 터미널에서 작동합니다.

쉘 스크립트는 cronjob에 의해 실행될 때가 아니라 터미널에서 작동합니다.

이상한 상황에 직면해 검색했지만 아무것도 찾지 못했습니다. 날짜를 가져오고 72시간을 추가하는 bash 스크립트가 있습니다. 터미널에서 실행하면 문제가 없지만 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"잘 작동하지만 어떤 이유로 이 부분을 명령 시작 부분으로 옮기면 오류가 발생합니다!

아주 이상하게도 같은 명령이 다른 컴퓨터에서도 작동합니다!

관련 정보