首页/系统/Linux 运维命令速查/定时任务资源控制:nice/ionice
定时任务与计划50 条

定时任务资源控制:nice/ionice

备份、索引这类重 IO 任务要和业务抢资源:nice 降 CPU、ionice 降 IO 优先级,cgroup 或 systemd unit 也可限定。

Linux 运维命令速查系统更新于 2026-10-13

定时任务的资源控制

备份、索引、批量同步这类重 IO 任务会和在线业务抢资源:nice 降低 CPU 调度优先级,ionice 调整 IO 优先级,两者叠加能让批任务「有闲置就抢、业务忙时让路」。需要更彻底的隔离时,交给 systemd 单元的 CPUQuota 与 IOWeight,或在 cgroup 层限制。

基本信息

用途让批任务对在线业务保持低干扰
语法nice -n 19 ionice -c3 命令
ionice 类别-c1 实时、-c2 尽力(默认)、-c3 空闲
观察方式ionice -p PID、ps -o ni,cls,cmd、systemd 单元的 IOWeight

典型使用场景

  • 夜间备份与在线业务共用磁盘,压低备份的 IO 优先级
  • 全量索引重建时不抢占数据库的磁盘带宽
  • 大文件分发与同步限优先级,避免拖慢接口响应
  • 核对批任务是否真的在让路:看调度类别与优先级
  • 评估 cgroup IO 限制与 ionice 之间的取舍
  • 让长跑任务在有闲置时尽快完成

示例

示例
nice -n 19 ionice -c3 /opt/app/backup.sh      # 最低 CPU 与空闲 IO
0 2 * * * /usr/bin/nice -n 19 /usr/bin/ionice -c3 /opt/app/backup.sh   # 写入任务
ionice -p $(pgrep -f backup.sh | head -1)     # 查看当前 IO 调度类别
ps -o pid,ni,cls,cmd -p $(pgrep -f backup.sh | head -1)   # 看 nice 与调度类
ionice -c2 -n7 -p 1234                        # 运行中调整 IO 优先级
nice -n 19 bash -c 'tar czf /backup/data.tgz /data'   # 打包任务的典型写法
systemctl show backup.service -p IOWeight     # systemd 侧的更深层限制

优先级参数

参数含义效果
nice -n 19CPU 调度优先级最低CPU 有竞争时最后被调度
ionice -c3空闲 IO 类仅在磁盘空闲时获得 IO 机会
ionice -c2 -n7尽力类,最低档仍参与竞争但权重最低
chrt调度策略查看与设置实时策略需谨慎使用
IOWeightsystemd 与 cgroup 权重比 ionice 更细的长期方案
ionice 的空闲类只在部分 IO 调度器下效果明显:现代多队列与 none 调度器下作用有限,需要硬性隔离时应改用 cgroup 的 IO 限制。
空闲类任务在持续满负载的磁盘上可能长期得不到执行,备份窗口要留出余量,否则任务被一路拖延,最终挤占业务时段。
nice 只影响 CPU 调度份额,对 IO 密集型任务几乎没有帮助;先判断任务类型再选参数,不要把它当成万能手段。
验证是否真的让路要看运行态:任务跑起来后用 ps 看 nice 与调度类,再用 iostat 观察磁盘等待是否被摊薄,只看配置容易得出错误结论。

易错点

  • 以为 nice 能解决 IO 争抢:CPU 优先级与磁盘调度无关,重 IO 任务照样拖慢业务
  • 对必须按时完成的任务使用空闲 IO 类:在忙盘上长期得不到执行,窗口被拖穿
  • 调整后不核对实际生效值:参数写错或被外层环境覆盖,还以为已经限速
  • 不了解调度器差异就套用 ionice:新内核默认调度器下效果可能接近于零

数据来源与参考

  • man 1 nice
  • man 1 ionice
  • 内核文档 block/ioprio

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌