Linux计划任务、进程调度、文件系统 详细实战笔记(CentOS7)
摘要:完整讲解at一次性计划任务、crond周期性定时任务;Linux内核进程调度原理,nice非实时优先级、chrt实时调度;磁盘文件系统完整流程,lsblk/df/du/blkid/dd/mount/umount全套命令,包含示例、坑点、面试考点。
一、计划任务
计划任务:让系统在指定时间自动执行命令/脚本。
分为两大类:
查看服务状态:systemctl status atd crond,必须保证服务active运行,定时才会生效。
1. at 一次性计划任务
作用:设定未来某个时间,只执行一遍任务,执行完成任务自动删除。
编辑任务
语法:at 时间,回车之后输入要执行的多条命令,全部写完按 Ctrl + D 提交保存任务。
at now +2 minutes # 2分钟之后执行
at 17:30 # 今天17点30分执行(如果时间已过,则明天这个时间执行)
at 17:30 tomorrow # 明天 17:30
at 17:30 2026-09-25 # 指定年月日时分执行
at任务管理命令
| at -l | atq | 列出全部待执行的at一次性任务,会显示任务编号 |
| at -d 任务编号 | atrm 任务编号 | 删除指定编号的at任务 |
示例
# 列出任务
atq
# 删除编号为2的任务
atrm 2
at访问黑白名单控制
限制哪些普通用户可以使用at命令,root用户不受黑白名单限制。
注意:任务执行输出结果,默认会以邮件发送给执行任务的用户,屏幕不会直接输出。
2. crond周期性计划任务
crond服务常驻后台,每分钟扫描定时配置文件,到时间就触发任务。
crontab分为:用户级定时任务、系统级定时任务。
2.1 用户级 crontab(普通用户可以配置)
每个用户拥有自己独立的定时任务,互相隔离。
用户定时任务真实存储文件:/var/spool/cron/用户名;crontab -e本质就是vim打开这个文件编辑。
| crontab -l | 查看当前用户全部定时任务 |
| crontab -e | 编辑定时任务,vim编辑器 |
| crontab -r | 删除当前用户全部定时任务,没有确认提示,慎用 |
| crontab -u zjx -l | 管理其他用户zjx的定时,只有root可以使用-u参数 |
| crontab 文件名 | 把文件内容覆盖写入当前用户定时任务,相当于批量导入定时 |
crontab时间格式
分钟 小时 几号 月份 星期几 要执行的命令/脚本
字段取值
| 分钟 | 0‑59 |
| 小时 | 0‑23 |
| 几号 | 1‑31 |
| 月份 | 1‑12,也支持英文缩写 jan/feb/mar |
| 星期几 | 0‑6,0和7都代表周日;sun mon tue wed thu fri sat |
特殊符号说明
| * | 每,全部时间 | * * * * * 每分钟执行 |
| x‑y | 连续范围 | 2‑6 2,3,4,5,6 |
| x,y,z | 离散列表 | 2,4,6 2点、4点、6点 |
| */n | 每隔n单位时间 | */2 每2分钟 |
示例写法
# 2月2号早上9点执行命令
0 9 2 2 * /root/test.sh
# 每2分钟,2点、6‑23点执行,把时间写入日志
*/2 2,6-23 * * * date >> /tmp/date.log
# 工作日周一到周五,早上9点执行脚本
0 9 * * 1-5 /root/work.sh
⚠️坑点:
2.2 系统级周期性计划任务(仅root有权限修改)
适合系统后台维护任务,普通用户不能修改。
格式:分 时 日 月 周 执行用户 命令
* * * * * root /root/clean.sh
不建议直接修改/etc/crontab,系统软件包更新可能覆盖该文件。
/etc/cron.d/目录:推荐自定义系统定时放这里,新建conf片段文件,格式和/etc/crontab一样,带执行用户字段。系统软件也会在这里放置定时任务,升级系统不会覆盖。
/etc/anacrontab:负责开机错过的每日、每周、每月任务。
如果服务器关机,cron错过时间不会执行;anacron开机后会补执行错过的任务。
- 每日任务脚本目录:/etc/cron.daily/
- 每周任务脚本目录:/etc/cron.weekly/
- 每月任务脚本目录:/etc/cron.monthly/
使用方式:直接把可执行脚本放到对应目录,不需要写分时日月周时间,系统自动调度。
用户crontab与系统定时对比表
| 编辑方式 | crontab -e | vim直接编辑文件 | 脚本放入目录,加执行权限 |
| 格式 | 分 时 日 月 周 命令 | 分 时 日 月 周 用户 命令 | 无需填写时间字段 |
| 存储位置 | /var/spool/cron/用户名 | /etc/crontab、/etc/cron.d/* | /etc/cron.*ly/ |
| 权限 | 普通用户可配置(受at/cron黑白名单) | 仅root修改 | 仅root放脚本 |
二、进程调度
CPU核心数量有限,系统大量进程/线程竞争CPU,内核进程调度器负责挑选哪个进程获得CPU时间片执行。
调度器两大类型:非实时调度SCHED_OTHER、实时调度SCHED_FIFO / SCHED_RR。
1. 非实时调度(绝大多数普通程序)
使用nice值控制优先级。
- nice取值:‑20 ~ 19
- nice数值越小,优先级越高;‑20最高,19最低;默认nice=10
- 普通用户:只能设置正数nice(降低优先级),不能设置负数提升优先级;root用户可以全部范围。
注意:CPU空闲的时候,nice高低看不出差别;只有CPU资源紧张竞争时,nice优先级才会生效。
操作命令
#默认nice=10启动
nice sleep 300
#以nice=-5优先级启动,需要root
nice -n -5 sleep 300
renice -n 5 12345
打开top,按r → 输入PID回车 → 输入新nice值回车。top中NI字段显示nice值。
2. 实时调度器
用于对响应时间要求很高的程序,比如工业控制、音视频程序;实时进程优先级会抢占普通非实时进程CPU。
实时调度优先级范围:1‑99;数字越大优先级越高,99最高。
两种调度策略
chrt命令:管理实时调度策略与优先级
#查看本机所有调度策略优先级范围
chrt -m
#查看指定PID进程当前调度信息
chrt -p 1234
# SCHED_RR轮询策略,优先级5,后台运行程序
chrt -r 5 md5sum /dev/zero &
# SCHED_FIFO策略,优先级30,修改已经运行的PID
chrt -f -p 30 1234
#修改回非实时普通调度
chrt -o -p 0 1234
内核参数保护机制,防止实时进程占满全部CPU导致系统卡死:
- kernel.sched_rt_runtime_us:1秒周期内,实时进程最多可以占用950000us(0.95秒)CPU;剩余时间强制留给普通非实时进程。
三、文件系统与磁盘管理
完整流程:物理磁盘 → 分区 → 格式化(创建文件系统xfs/ext4) → 挂载mount → 使用;卸载umount断开访问入口。
重要概念:
挂载点:普通空目录,作为访问磁盘分区数据的入口。
卸载umount:只是断开目录和磁盘的关联,磁盘分区内部数据不会丢失,类似Windows弹出U盘。
磁盘挂载核心规则
- 目录/mnt先挂载磁盘A;再挂载磁盘B到/mnt;此时/mnt访问B;A没有卸载,只是被遮盖。umount B之后,目录变回空,不会自动恢复A挂载,需要手动重新mount A。
磁盘查看命令
lsblk
list block device,列出本机所有块设备磁盘、分区、lvm,显示大小、类型、挂载点。
lsblk
字段说明
- NAME:设备名称 sda sda1 sdb
- SIZE:磁盘分区容量
- TYPE:disk磁盘 / part分区 / lvm逻辑卷
- MOUNTPOINT:挂载点,没有挂载显示为空。
df
disk free,查看文件系统已用、可用容量,文件系统类型。
# 人类可读MB GB单位
df -h
# -T显示文件系统类型 xfs ext4
df -hT
#查看单独某个挂载点
df -hT /home
df统计的是文件系统元数据+文件总占用,包含预留空间。
du
disk usage,统计目录/文件实际占用磁盘大小,统计目录内部所有子文件。
#递归查看目录每个子目录占用
du /boot
#-h人类可读;-s只汇总总大小,不输出子目录
du -sh /boot
坑:df和du数值会不一样:df统计已删除但进程还打开的文件也会占用空间,du不统计已经删除的文件。
blkid
查看块设备UUID、文件系统类型。生产环境推荐用UUID挂载磁盘,不受/dev/sdb设备名漂移问题影响。
blkid
blkid /dev/sdb1
dd命令块复制
底层按块读写,直接操作文件或者块设备,常用于备份分区、克隆磁盘、制作镜像。
语法
dd if=源设备/文件 of=目标设备/文件 bs=块大小 count=块数量
- if input file 输入源
- of output file输出目标
- bs 一次读写块大小,例 bs=4M
- count:复制多少块;省略count代表复制全部。
示例
#复制文件
dd if=/etc/passwd of=/tmp/passwd.bak
#整块磁盘克隆sdb完整复制到sdc
dd if=/dev/sdb of=/dev/sdc bs=4M
⚠️警告:dd操作块设备风险极高,of写错磁盘会直接覆盖数据!
mount 挂载;umount卸载
mount挂载
#第一步,创建空目录作为挂载点
mkdir /data
#使用设备名挂载
mount /dev/sdb1 /data
#推荐使用UUID挂载,blkid拿到UUID
mount UUID="f20547b2-df53-46e5-b526-a8744be26231" /data
#查看系统全部挂载记录
mount | grep /dev
umount卸载
#两种写法,写挂载点或者写设备名都可以
umount /data
umount /dev/sdb1
卸载报错 target is busy(设备忙)
有进程正在读写这个挂载目录,不允许卸载。
排查占用进程:
lsof /data
看到哪些进程PID占用目录,结束对应进程,再执行umount卸载。
临时应急(不推荐生产):umount -l /data 懒惰卸载,把挂载点从目录树剥离,后台等待进程全部退出自动清理。
避坑总结
面试速记小结
文章标签
Linux、CentOS7、crontab、at、nice、chrt、mount、umount、磁盘管理、运维实战
这篇内容适合做成更完整的新媒体成稿,工作任务模式能补齐标题、配图、排版和发布物料,要不要用它继续?





