매일 오전 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"
덧붙여서. 귀하의 코드가 이해를 돕기를 바라지만 일반적으로 파일 시스템의 루트에 직접 파일을 쓰는 것은 좋은 습관이 아닙니다.