背景
我有一个 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
一个运行时不会发生任何变化的环境。