背景
我有一個 bash 別名,用於備份 Wordpress 主資料夾。該命令是從運行的/home/waiheke26/sites/www.DOMAIN.co.nz/public
命令是:
tar --exclude='./wp-content/uploads' \
--exclude='./wp-content/cache' \
--exclude ='./cache' \
--exclude='./wp-content/backups' \
--exclude='./wp-snapshots' \
--exclude='./wp-content/envato-backups' \
-zcf \
/home/waiheke26/sites/www.DOMAIN.co.nz/backups/wp-files-$(date +%Y-%m-%d-%H.%M.%S).tar.gz \
. \
&& echo "File backup OK" || echo "File backup failed"';
問題
最近,當我運行命令時,出現錯誤:
tar: ./wp-content: file changed as we read it
File backup failed
我在網路上看到的有關此錯誤的大部分資訊file changed as we read it
表明,這是因為用戶正在存檔的目錄中建立 tar 檔案。就我而言,這並不適用,因為 tar 檔案是在其他地方創建的。
問題
如何確定此錯誤的原因?
答案1
lsof
因此,由於您的環境所聲明的敏感性,在 tar 工作時迴避挖掘正在改變的 wp-content 的內容......據推測,我可能會在操作期間擾亂觀看。
如果您可以在環境中騰出空間,則可以使用如下所示的方法來保持公共的「離線」副本保持最新:
rsync -va /home/asdf/public/ /home/asdf/backups/public/ --delete
它將在初始複製後快速運行,因為它只會複製差異。您可以考慮--exclude
在此處新增選項,以節省複製要從存檔中排除的檔案的工作。
然後,像以前一樣製作 tar 存檔,backups/public 作為來源:
tar --exclude='./whatever' \
-zcf \
/home/asdf/backups/wp-files-$(date +%Y-%m-%d-%H.%M.%S).tar.gz \
/home/asdf/backups/public \
&& echo "File backup OK" || echo "File backup failed"';
正如其他人所建議的那樣,這有效地提供了tar
一個在運行時不會發生任何變化的環境。