我有一个 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 压缩,因为:
- 不需要保留文件权限和所有者/组
- 与 gzip 相比,7z 节省的空间对我来说至关重要
令我困扰的是,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 秒。
最佳答案
你可以使用
prlimit --cpu=10 7z a -t7z -mx=9 /$PATH/$DATE.sql.7z /$PATH/$DATE.sql
这会将 cpu 使用率限制在 10%
关于linux - 每隔 x(毫秒)暂停一个 shell 脚本以减少立即的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856912/