cron의 wget: 오류가 발생하지 않거나 파일이 비어 있지 않은 경우에만 시스템에 쓰기

cron의 wget: 오류가 발생하지 않거나 파일이 비어 있지 않은 경우에만 시스템에 쓰기

매일 오전 9시에 온라인 리소스를 가져와 로컬 파일에 쓰는 다음 crontab이 있습니다.

0 9 * * * /usr/bin/wget --http-user=username --http-password=password https://remote_file_to_pull.json -O /local_output_file.json >/dev/null 2>&1

문제는 가끔 원격 파일을 검색할 때 서버에서 오류 500이 발생한다는 것입니다. 그것이 하는 일은 wget빈 파일을 덮어쓰는 것뿐입니다.

오류가 발생하지 않거나 기록 중인 파일이 비어 있지 않은 경우에만 파일에 기록하도록 cron이를 변경할 수 있는 방법이 있습니까 ?wget

감사해요!

답변1

crontab 항목을 성공 시에만 출력을 업데이트하는 이 스크립트에 대한 참조로 바꾸십시오.wget 그리고길이가 0이 아닌 파일을 반환합니다.

#!/bin/bash
#
url='https://remote_file_to_pull.json'
user='username'
pass='password'

target='/local_output_file.json'

if wget --quiet --http-user="$user"--http-password="$pass" -O "$target.tmp" "$url" && [[ -s "$target.tmp" ]]
then
    # Success
    mv -f "$target.tmp" "$target"
else
    # Failure of some sort; you might want to report this
    :
fi
rm -f "$target.tmp"

덧붙여서. 귀하의 코드가 이해를 돕기를 바라지만 일반적으로 파일 시스템의 루트에 직접 파일을 쓰는 것은 좋은 습관이 아닙니다.

관련 정보