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 そして長さがゼロ以外のファイルを返します。

#!/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"

ちなみに。あなたのコードは理解を助けたいと思いますが、一般的にファイルシステムのルートに直接ファイルを書き込むのは良い習慣ではありません。

関連情報