【发布时间】:2014-03-18 09:24:19
【问题描述】:
我有一个 shell 脚本,它每小时备份我的 MySQL 数据库。这是一个基本脚本:
mysqldump --user=$USER --password=$PASS $DB > /$PATH/$DATE.sql &&
7z a -t7z -mx=9 /$PATH/$DATE.sql.7z /$PATH/$DATE.sql &&
rm /$PATH/$DATE.sql
我正在使用 7z 压缩,因为:
- 不需要保留文件权限和所有者/组
- 7z 与 gzip 相比节省的空间对我来说至关重要
让我困扰的是7z 部分(第 2 行)大约需要 30 秒,并且在那段时间使用了相当多的 CPU。从这里开始,我的服务器负载图表每小时都会出现 50% 的峰值,我想摆脱这些峰值。
我已经用nice 执行了这个脚本:
0 * * * * /usr/bin/nice -n 19 /path/to/backup.sh > /dev/null
此时我能想出的唯一解决方案是以某种方式暂停 7z 部分的执行,假设每秒 1 秒。这可以为其他进程释放 CPU 时间。
这可能吗?
我在我的 .php 脚本中做了类似的事情,尽管暂停是循环的,例如:
while($d=mysqli_fetch_assoc($q)){
usleep(250000);
// process $d
}
我希望 7z 执行每 X(某事)休眠 1 秒。
【问题讨论】:
-
Is this possible?-- 极不可能。你提到你需要高压缩。您需要为此付费(就计算能力而言)。尝试使用nice玩更多。
标签: linux bash shell ubuntu terminal