我有以下 crontab 来每天上午 9 点提取在线资源并将其写入本地文件:
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
和它返回一个非零长度的文件
#!/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"
顺便一提。我希望您的代码具有说明性,但将文件直接写入文件系统的根目录通常不是一个好习惯。