Linux 计划任务管理与进程调度优先级详解(超全实操教程)
Linux 计划任务管理与进程调度优先级详解(超全实操教程)
文章目录
- Linux 计划任务管理与进程调度优先级详解(超全实操教程)
- 一、一次性计划任务(at 服务)
- 1\. 核心概念
- 2\. 服务安装与状态检查
- 3. at 命令语法与交互式使用
- 3\.1 基础语法
- 3\.2 交互式实操示例
- 4\. 脚本方式批量执行任务(推荐)
- 5\. 支持的时间格式(timespec)
- 6. 任务管理:查看、详情、删除
- 6.1 查看任务队列(atq / at -l)
- 6.2 任务队列优先级(a-z 26 级队列)
- 6\.3 查看任务详细脚本内容(at -c)
- 6.4 删除定时任务(atrm / at -d)
- 7\. 用户权限控制
- 二、周期性计划任务(crond 服务)
- 1\. 核心概念
- 2. crontab 核心管理命令
- 3\. 定时任务格式详解(重中之重)
- 4\. 经典实战示例
- 5. 任务导入与用户管理
- 5.1 文件导入定时任务(覆盖式)
- 5.2 root 管理其他用户任务
- 6\. 综合实操练习(经典考题)
- 7\. 系统级周期性计划任务
- 7\.1 /etc/crontab(系统主配置)
- 7.2 `/etc/cron.d/`(自定义任务目录,推荐)
- 7\.3 /etc/anacrontab(容错定时任务)
- 三、Linux 进程调度与CPU优先级管理
- 1\. 进程调度原理
- 2\. 实时调度器(高优先级核心进程)
- 3\. 非实时调度器(普通进程默认)
- 4. Nice 值优先级(非实时进程)
- 4\.1 核心规则
- 4.2 权限限制
- 4.3 查看 nice 值
- 4.4 nice 启动指定优先级
- 4.5 renice 动态修改运行进程优先级
- 5\. chrt 实时进程优先级管理
- 6\. 核心优先级结论
- 四、全文总结
本文基于 CentOS7 系统,完整讲解 Linux 两大核心运维技能:一次性计划任务(at)、周期性计划任务(cron)以及CPU 进程调度与优先级管理。全文包含原理、命令详解、大量实战案例、权限控制与生产结论,适合零基础学习、面试复习与生产落地。
一、一次性计划任务(at 服务)
1. 核心概念
一次性计划任务:指定未来某个时间点执行一次命令/脚本,任务执行完成后自动失效,仅执行单次。
at 功能并非单一命令,由两部分组成:
系统后台守护进程:atd(负责监听、调度、执行任务)
交互命令:at、atq、atrm、at -c 等(用于手动管理任务)
2. 服务安装与状态检查
CentOS 7 最小化安装默认无 at 工具,需手动安装:
# 安装at工具yuminstallat-y# 查看atd服务状态、是否开机自启systemctl status atd正常运行输出示例:
● atd.service - Job spooling tools Loaded: loaded(/usr/lib/systemd/system/atd.service;enabled;vendor preset: enabled)Active: active(running)since Wed2022-12-2116:54:08 CST;3min 22s ago Main PID:1184(atd)Tasks:1CGroup: /system.slice/atd.service └─1184 /usr/sbin/atd-f3. at 命令语法与交互式使用
3.1 基础语法
at <时间格式>
at 从标准输入读取执行命令,编辑完成后按Ctrl+D提交任务,按Ctrl+Backspace删除输入错误内容。
3.2 交互式实操示例
需求:5 分钟后向日志文件写入内容
at now +5 minutes# 输入执行命令at>echohello world>/tmp/hello.log# 按 Ctrl+D 结束提交,自动出现 EOT 标识at><EOT>job1at Wed Dec2117:09:0020224. 脚本方式批量执行任务(推荐)
多条复杂命令、脚本执行,建议通过文件重定向或-f参数读取脚本,避免手动输入出错。
# 1. 编写自定义脚本vimmyscript.sh#!/bin/bashdate>>/tmp/myscript.logechohello myscript>>/tmp/myscript.log# 2. 重定向方式执行:5分钟后运行脚本at now +5 minutes<myscript.sh# 3. -f参数执行:100分钟后运行脚本at now +100 minutes-fmyscript.sh5. 支持的时间格式(timespec)
at 支持灵活的时间定义,常用格式如下:
now +5 hours:5 小时后执行teatime tomorrow:明日 16:00(茶点时间)noon +4 days:4 天后中午 12 点执行5 pm august 3 2026:2026 年 8 月 3 日下午 5 点执行
完整时间规则参考官方文档:/usr/share/doc/at/timespec
6. 任务管理:查看、详情、删除
6.1 查看任务队列(atq / at -l)
# 两种命令效果完全一致at-latq6.2 任务队列优先级(a-z 26 级队列)
atd 提供 a-z 共 26 个任务队列,字母越靠后,任务优先级越低,默认使用 a 队列。
# 指定b队列执行任务at-qb now +5 minutes<myscript.sh# 仅查看b队列任务at-l-qb6.3 查看任务详细脚本内容(at -c)
# 查看指定ID任务的完整执行脚本at-c任务 ID6.4 删除定时任务(atrm / at -d)
# 两种删除方式atrm 任务ID at-d任务ID# 清空所有任务:依次删除所有查询到的任务 ID7. 用户权限控制
通过两个配置文件管控用户使用 at 服务的权限,优先级规则:
若
/etc/at.allow存在:仅文件内用户可使用at 服务务(白名单优先)若
/etc/at.allow不存在:读取/etc/at.deny,文件内用户被禁止(黑名单模式)
CentOS7 默认状态:at.deny为空、无 at.allow,所有用户均可使用at 任务。
# 查看权限配置文件ls/etc/at.*cat/etc/at.deny二、周期性计划任务(crond 服务)
1. 核心概念
周期性计划任务:按照分钟、小时、天、月、周循环重复执行命令/脚本,是运维自动化核心工具,常用于定时备份、日志切割、服务器巡检、数据同步等场景。
Cron 体系组成:crond 常驻守护进程 + crontab 管理命令 + 系统配置文件。
注意:若定时任务命令未做输出重定向,crond 会将执行日志通过邮件发送给任务所属用户。
2. crontab 核心管理命令
crontab-l# 查看当前用户所有定时任务crontab-e# 编辑定时任务(默认vi编辑器)crontab-r# 删除当前用户所有定时任务crontab-u用户名# root专属,管理其他用户的定时任务3. 定时任务格式详解(重中之重)
每行任务固定 6 个字段:分钟 小时 日期 月份 星期 执行命令
字段取值范围:
分钟:0-59
小时:0-23
日期:1-31
月份:1-12 / Jan-Dec
星期:0-7(0 和 7 均代表周日)/ Sun-Sat
通用符号规则:
*:任意时间,代表每时每刻都执行x-y:连续范围,如9-16代表9点到16点x,y:离散不连续时间,如2,6代表2点、6点*/n:间隔执行,如*/2每2分钟执行一次
4. 经典实战示例
# 1. 每年 2 月 2 日 9 点,执行年度备份脚本0922* /usr/local/bin/yearly_backup# 2. 7 月每周五 9-16 点,每 5 分钟输出一次 Chime*/59-16 * Jul5echo"Chime"# 3. 工作日(周一至周五)23:58 执行日报脚本5823* *1-5 /usr/local/bin/daily_report# 4. 工作日早 9 点发送工作邮件09* *1-5mutt-s"Checking in"boss@example.com % Hi boss, just checking in.# 5. 2 点、6-23 点,每2分钟记录系统时间*/22,6-23 * * *date>>/tmp/date.log5. 任务导入与用户管理
5.1 文件导入定时任务(覆盖式)
# 1. 编写任务文件vimmycron0922* /usr/local/bin/yearly_backup09* *1-5mutt-s"Checking in"boss@example.com % Hi boss, just checking in.# 2. 导入任务(覆盖当前用户所有原有任务)crontabmycron# 3. 查看导入结果crontab-l5.2 root 管理其他用户任务
crontab-ulaoma-e# 编辑 laoma 用户定时任务crontab-ulaoma-l# 查看 laoma 用户定时任务crontab-ulaoma-r# 清空 laoma 用户所有定时任务6. 综合实操练习(经典考题)
需求:编写脚本,11 月奇数日期、11–18 点每 2 分钟执行一次
# 1. 编写业务脚本vim/usr/local/bin/myjob#!/bin/bashmd5sum /dev/zero&# 后台运行计算任务sleep20# 休眠20秒pkillmd5sum# 终止计算进程# 2. 添加执行权限chmod+x /usr/local/bin/myjob# 3. 配置定时任务crontab-e*/211-18 */211* /usr/local/bin/myjob# 4. 监控任务运行journalctl-f# 实时监控cron执行日志top# 监控进程CPU占用状态7. 系统级周期性计划任务
用户级任务仅当前用户生效,系统级任务由 root 配置,全局生效,crond 会读取三类系统配置:
7.1 /etc/crontab(系统主配置)
与用户 crontab 区别:多一个执行用户字段,可指定任务运行身份
cat/etc/crontab# 格式:分 时 日 月 周 执行用户 命令* * * * * rootcommand7.2/etc/cron.d/(自定义任务目录,推荐)
自定义系统任务统一放此目录,避免系统更新覆盖/etc/crontab,安全性更高。
# 系统默认每小时任务cat/etc/cron.d/0hourly 01 * * * * root run-parts /etc/cron.hourly7.3 /etc/anacrontab(容错定时任务)
CentOS 7 中由 crond 进程接管,作用:弥补关机错过的定时任务,开机自动补执行,保障日/周/月任务100%执行。
系统固定周期任务目录:
/etc/cron.daily:每日任务/etc/cron.weekly:每周任务/etc/cron.monthly:每月任务
cat/etc/anacrontab# 周期天数 延迟分钟 任务标识 执行命令15cron.dailynicerun-parts /etc/cron.daily725cron.weeklynicerun-parts /etc/cron.weekly @monthly45cron.monthlynicerun-parts /etc/cron.monthly三、Linux 进程调度与CPU优先级管理
1. 进程调度原理
Linux 系统进程数量远大于 CPU 核心数,内核通过进程调度器分配 CPU 资源,核心调度方式:
时间片轮转:默认 10-20ms 一个时间片,进程轮流占用 CPU
优先级调度:高优先级进程获取更多 CPU 资源,低优先级进程受限
调度器分为两大类:实时调度器、非实时调度器。
2. 实时调度器(高优先级核心进程)
用于系统核心、高重要性进程,抢占 CPU 能力极强,优先级范围1-99(数值越大优先级越高)。
支持两种调度策略:
SCHED_FIFO:先入先出,进程不阻塞、不主动让出,就持续占用 CPU
SCHED_RR:时间片轮询,同优先级进程均分 CPU 时间片
系统保护机制(防止实时进程占满 CPU):
kernel.sched_rt_period_us:CPU调度周期,默认1秒kernel.sched_rt_runtime_us:实时进程最大占用时间,默认0.95秒剩余 0.05 秒固定留给普通进程,保障系统不卡死、SSH 可正常连接
3. 非实时调度器(普通进程默认)
系统绝大多数普通进程使用此调度,无实时抢占权限,支持三种策略:
SCHED_NORMAL(SCHED_OTHER):默认时间片轮转策略
SCHED_BATCH:批量后台任务,降低 CPU 竞争频率
SCHED_IDLE:极低优先级,仅系统空闲时执行,优先级低于 nice 19
4. Nice 值优先级(非实时进程)
4.1 核心规则
nice 值范围:-20 ~ 19,默认值 0
数值越小:优先级越高(-20 最高)
数值越大:优先级越低(19 最低)
无CPU竞争时,所有进程均可正常占用资源
4.2 权限限制
普通用户:仅可设置正数 nice 值(降低进程优先级),无法调高优先级
root用户:可设置 -20~19 所有值,自由调整高低优先级
4.3 查看 nice 值
# 查看系统进程 nice 值ps-onice,cmd$(pgrep systemd)# top 界面查看 NI 列(nice 值)top4.4 nice 启动指定优先级
# 默认 nice=10 运行进程nicemd5sum /dev/zero&# 普通用户设置正优先级(可行)nice-n2md5sum /dev/zero&# 普通用户设置负优先级(权限拒绝)nice-n-2md5sum /dev/zero&4.5 renice 动态修改运行进程优先级
# 普通用户:仅能调高 nice 值(降低优先级)renice-n2进程PID# root 用户:调低 nice 值(提升优先级)renice-n-2进程PID5. chrt 实时进程优先级管理
chrt专用于管理实时调度进程,仅 root 可操作,用于修改进程调度策略与实时优先级。
# 查看所有调度策略优先级范围chrt-m# 以RR策略、优先级5运行进程chrt-r5md5sum /dev/zero&# 修改为FIFO策略、优先级10chrt-f--pid10进程PID# 恢复为普通非实时进程chrt-o--pid0进程PID6. 核心优先级结论
最低优先级的实时进程(1),优先级 > 最高优先级的非实时进程(-20)。
生产环境核心服务可配置实时优先级,保障高负载下服务稳定性。
四、全文总结
at一次性任务:单次定时执行,依赖atd服务,支持灵活时间格式、队列优先级、脚本批量执行,权限由at.allow/at.deny控制。
crond周期性任务:循环定时执行,分用户级、系统级任务,anacrontab可容错补执行,是运维自动化核心工具。
进程调度:分实时/非实时两类调度策略,nice值管控普通进程优先级,chrt管控实时进程优先级,实时进程优先级整体高于普通进程。
权限严格区分:普通用户仅能降低进程优先级,root可自由调整所有进程优先级,保障系统安全稳定。
