毎日午前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
そして長さがゼロ以外のファイルを返します。
#!/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"
ちなみに。あなたのコードは理解を助けたいと思いますが、一般的にファイルシステムのルートに直接ファイルを書き込むのは良い習慣ではありません。