Shell/Bash - 在行尾之前继续运行的脚本

Shell/Bash - 在行尾之前继续运行的脚本

我有一个 shell / bash,它非常适合制作备份脚本,问题是我有一些大文件,运行脚本时会出现问题。脚本有 qtar.gz格式的压缩文件,它做到了,但是当文件大小达到 6GB 以上时,或者脚本继续压缩文件,但它进入下一行并且备份失败,服务器set_time_limit;在 php 中必须有一个等价的,调用我使用的 shell / bash 的 php 文件set_time_limit (0);运行良好,shell / bash 也有一些问题吗?

剧本:

MYSQLDUMP="$(which mysqldump)"
$MYSQLDUMP -u $DBUSER -h $DBHOST -p$DBPASS $DBNAME | gzip > $TIMESTAMP.sql.gz

ssh $USER_SSH@$HOST_SSH "tar -zcf - $HOME" > $TIMESTAMP.backup.tar.gz

tar -zcf $TIMESTAMP.tar.gz $TIMESTAMP.backup.tar.gz $TIMESTAMP.sql.gz

SUCCESS=$?

rm $TIMESTAMP.sql.gz
rm $TIMESTAMP.backup.tar.gz

我没有发布变量,因为我认为没有必要

在他完成 tar 之前,它会删除带有最后几行的 2 个文件...如果文件小于 6GB 或 7GB,则不会发生这种情况

答案1

首先,了解如何调用 php 脚本会很方便。其次,您可以让 bash/shell 脚本执行 mysql 转储,而不是让 php 脚本执行此操作,而 php 脚本所做的只是调用它。

现在,既然您的 php 脚本已连接到 mysql,那么您只需对当前脚本进行最小程度的修改即可。不必让您的 php 脚本等待 bash 脚本。只需让 php 调用 bash 脚本,然后忘掉它,这样您就不必担心需要多长时间。

在您的 bash 脚本中,让它在压缩完成后更新 mysql 中的一行,说明它是成功还是失败,如果您使用 bash 脚本进行转储,那么它比使用 php 脚本进行转储更安全,IE,您的 DB 凭据将永远无法通过 Web 访问,我建议也为 php 生成 ssh 私钥。然后,您可以稍后使用不同的脚本让 php 检查它,然后通过检查 DB 的结果来执行其他操作,例如直观地报告它是否成功等。

您可以使用多种不同的方法来解决这个问题,从使用 PHP 和一些不同的脚本,到使用 bash 来做更多的事情,甚至包括其他语言(如 javascript)来帮助动态更新页面结果,这样您就不必刷新等等。

相关内容