我目前有一个设置,其中有一个紧急服务器,它会定期使用 wget 从我的主网络服务器获取文件。如果一切顺利,我希望 wget 破坏旧的缓存文件。但是,如果请求返回 404 或出现其他问题导致无法检索数据(例如我的主服务器出现故障),我不希望缓存的数据被破坏。我尝试过使用 -N ,如果有新版本可用,它会正确破坏数据。但是,如果出现 404,它会用 0 字节文件破坏该数据。
答案1
如果您可以修改 Web 服务器的配置或允许拥有 .htaccess,则可以设置自定义错误页面。例如,假设 apache 作为网络服务器,创建一个错误页面/var/www/error-pages/404-error.html
并将以下内容添加到您的 .htaccess 或 vhosts 部分。
Alias /error-pages /var/www/error-pages
ErrorDocument 404 /error-pages/404-error.html
与别名指令一起,如果您有多个虚拟主机,则可以对多个虚拟主机使用相同的错误页面。仅此一项就应该有助于避免破坏,但您也可以添加-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