空のデータで良いデータを破壊しないようにwgetを設定します。

空のデータで良いデータを破壊しないようにwgetを設定します。

現在、定期的にwgetを使用してプライマリWebサーバーからファイルをインポートする緊急サーバーがある設定があります。すべてが順調に進むなら、wgetが古いキャッシュファイルを削除したいと思います。ただし、要求が404を返すか、データの取得を妨げる他の問題が発生した場合(たとえば、プライマリサーバーがダウンしている場合など)、キャッシュされたデータが破損することは望ましくありません。 -Nを試しましたが、新しいバージョンがあるとデータは正しく削除されます。ただし、404が発生すると、データは0バイトのファイルで破損します。

答え1

Webサーバーの構成を変更したり、.htaccessを許可できる場合は、カスタムエラーページを設定できます。たとえば、Apache を Web サーバーと仮定すると、エラーページを作成し、/var/www/error-pages/404-error.html.htaccess または vhosts セクションに次のコンテンツを追加します。

Alias /error-pages /var/www/error-pages
ErrorDocument 404 /error-pages/404-error.html

複数の仮想ホストがある場合は、aliasディレクティブで複数の仮想ホストに同じエラーページを使用できます。これは破損を防ぐのに役立ちますが、パラメータを追加してすべてのカスタムエラーページをスキップする-X error-pagesこともできます。wget

答え2

wgetを呼び出す前にファイルをコピーしてください。 (wgetにファイルを削除するのではなく、リンクを解除して再作成するように指示する方法はないようです)。

cp -p foo foo.prev
wget http://example.com/foo
if ! [ -S "foo" ]; then mv -f foo.prev foo; done

関連情報