欢迎光临
我们一直在努力

Linux运维:at/crontab定时任务、nice/chrt进程优先级、mount磁盘挂载详解

Linux计划任务、进程调度、文件系统 详细实战笔记(CentOS7)

摘要:完整讲解at一次性计划任务、crond周期性定时任务;Linux内核进程调度原理,nice非实时优先级、chrt实时调度;磁盘文件系统完整流程,lsblk/df/du/blkid/dd/mount/umount全套命令,包含示例、坑点、面试考点。

一、计划任务

计划任务:让系统在指定时间自动执行命令/脚本。
分为两大类:

  • 一次性任务 at:只执行一次,依赖atd后台服务;
  • 周期性任务 crond:按照分钟、小时、日、月、周循环反复执行,依赖crond后台守护进程。
  • 查看服务状态: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用户不受黑白名单限制。

  • /etc/at.allow 白名单:文件内写用户名,只有名单内用户可以使用at,白名单存在,deny文件失效。
  • /etc/at.deny 黑名单:名单中的用户禁止使用at;白名单文件不存在才会生效。
  • 注意:任务执行输出结果,默认会以邮件发送给执行任务的用户,屏幕不会直接输出。

    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

    ⚠️坑点:

  • crontab任务执行没有标准输出到屏幕,输出默认邮件;建议脚本内自己重定向日志,方便排错;
  • crontab环境变量很少,脚本尽量写绝对路径;
  • 星期和日期是或关系,不是并且;周几和几号同时匹配,就会执行。
  • 2.2 系统级周期性计划任务(仅root有权限修改)

    适合系统后台维护任务,普通用户不能修改。

  • /etc/crontab:系统总定时模板文件,格式比用户crontab多一个【用户名】字段。
    格式:分 时 日 月 周 执行用户 命令
  • * * * * * 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系统配置/etc/crontab /etc/cron.dcron.daily/weekly/monthly
    编辑方式 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 -n 数值 程序:启动程序的时候直接设置nice优先级
  • #默认nice=10启动
    nice sleep 300

    #以nice=-5优先级启动,需要root
    nice -n -5 sleep 300

  • renice -n 数值 PID:修改已经正在运行进程的nice值
  • renice -n 5 12345

  • top工具交互式修改nice:
    打开top,按r → 输入PID回车 → 输入新nice值回车。top中NI字段显示nice值。
  • 2. 实时调度器

    用于对响应时间要求很高的程序,比如工业控制、音视频程序;实时进程优先级会抢占普通非实时进程CPU。
    实时调度优先级范围:1‑99;数字越大优先级越高,99最高。

    两种调度策略

  • SCHED_FIFO 先进先出:进程拿到CPU就一直运行,直到IO阻塞、自己主动让出CPU,或者更高优先级进程抢占。同优先级FIFO进程不会自动轮换。
  • SCHED_RR 时间片轮询:同优先级进程分配固定时间片,时间用完切换下一个同优先级实时进程。
  • 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。
  • 如果目录里面原本就存在文件,当把磁盘挂载到此目录,目录原有文件会被隐藏;执行umount卸载磁盘,原来的文件才会重新显示出来。
  • 磁盘查看命令

    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 懒惰卸载,把挂载点从目录树剥离,后台等待进程全部退出自动清理。

    避坑总结

  • at依赖atd,crond依赖crond服务,服务没启动定时全部不执行;crontab脚本尽量写绝对路径,手动测试脚本再放入定时。
  • nice是非实时进程,‑20最高,19最低;chrt控制实时调度,优先级1‑99,实时进程会抢占普通进程CPU。
  • 磁盘流程:磁盘‑>分区‑>格式化‑>挂载‑>使用;挂载点必须是空目录。
  • df看文件系统整体容量;du统计目录实际占用;blkid获取UUID,生产优先UUID挂载。
  • umount卸载失败用lsof排查占用进程;挂载会隐藏目录原有文件,卸载后文件恢复可见。
  • 面试速记小结

  • at一次性定时,crontab周期性;用户任务保存在/var/spool/cron/用户名;系统定时优先写/etc/cron.d,不要直接修改/etc/crontab;anacron负责补执行关机错过的每日每周每月任务。
  • nice:非实时,‑20最高,19最低;renice修改运行进程nice;chrt工具管理SCHED_FIFO、SCHED_RR实时调度。
  • lsblk查看块设备;df查看文件系统使用率;du统计目录占用;blkid获取UUID。
  • mount挂载,umount卸载;target is busy使用lsof查找占用进程;卸载不等于删除磁盘数据。
  • 文章标签

    Linux、CentOS7、crontab、at、nice、chrt、mount、umount、磁盘管理、运维实战

    这篇内容适合做成更完整的新媒体成稿,工作任务模式能补齐标题、配图、排版和发布物料,要不要用它继续?

    赞(0)
    未经允许不得转载:171主机测评 » Linux运维:at/crontab定时任务、nice/chrt进程优先级、mount磁盘挂载详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址