Linux 计划任务管理与进程调度管理

Linux 计划任务管理

一次性计划任务

一次性计划任务是指在未来某个时间点执行一个命令或一系列命令。

atd 服务

Linux 系统中at提供一次性计划任务功能。

at不是一个单独的工具,包括系统后台进程(atd)和一系列与后台进程atd交互的命令(例如at atq等等)。

at 命令

at命令从标准输入中读取要执行的命令。手动输入命令时,按ctrl+D完成输入。

输入完成,按ctrl+d完成。上面的字符’',就是安 ctrl+d 自动出现的。

如果输入错误,使用ctrl+backspace删除

[root@server ~ 11:08:24]# at 11:10
at> echo hello world >/var/log/myat.log
at> date >> /var/log/myat.log
at> <><EOT>      
job 2 at Thu Jul 31 11:10:00 2025
[root@server ~ 11:10:02]# cat /var/log/myat.log
hello world
2025年 07月 31日 星期四 11:10:02 CST
[root@server ~ 11:10:32]# at 11:15
at> systemctl restart sshd  
at> <EOT>
job 3 at Thu Jul 31 11:15:00 2025
[root@server ~ 11:11:33]# at -l 1
3	Thu Jul 31 11:15:00 2025 a root
[root@server ~ 11:11:48]# at -l
3	Thu Jul 31 11:15:00 2025 a root
[root@server ~ 11:12:21]# at -d 3

# at -l 或 atq 
#查看任务队列。
[root@server ~ 11:12:47]# at -l


crontab 命令

用户周期性计划任务

周期性计划任务是指在未来的一些时间周期性地执行一个命令或一系列命令。

crond 服务

Linux 系统中cron 提供周期性计划任务功能。

cron包括系统后台进程(crond)、crontab 命令和多个配置文件。

用户可以使用 crontab 命令管理自己的周期性作业。

如果cron job运行的命令没有重定向 stdout 和 stderr,crond进程将通过邮件发送给job所有者。

crontab 命令
crontab -l

查看周期性计划任务。

以下作业将在每年2月2日上午9点准点执行命令/usr/local/bin/yearly_backup。

0 9 2 2 * /usr/local/bin/yearly_backup

在这里插入图片描述

[yy@server ~ 11:33:22]$ crontab -e
*/2 * 31 7 * date >> /tmp/date.log

[yy@server ~ 11:32:51]$ tail -f /tmp/date.log
2025年 07月 31日 星期四 11:30:01 CST
2025年 07月 31日 星期四 11:32:01 CST

系统周期性计划任务

系统管理员使用配置文件定义系统周期性作业。crond守护进程会从多个配置文件中读取系统周期性计划作业:

  • /etc/crontab
  • /etc/cron.d/ 目录
  • /etc/anacrontab
/etc/crontab

crond的配置文件比crontab命令定义的jobs多一个区域,在最后一个时间和command之间,指明使用哪个账户执行job。

/etc/cron.d

系统周期性作业应始终在 /etc/cron.d/ 目录中创建自定义crontab文件,防止cronie更新后覆盖/etc/crontab文件。其他应用也会将系统周期性作业存放在该目录。

/etc/cron.d/0hourly定义了每小时要执行的任务: run-parts /etc/cron.hourly

作用:每小时将 /etc/cron.hourly目录下所有脚本按顺序执行一次。

/etc/anacrontab

在过去,/etc/anacrontab 由单独的一个进程anacron处理,在CentOS 7 及后续版本中,这个文件也由 crond 进程处理,目的是确保重要的工作总是被执行,即使系统关机或者其他重大事故。

/etc/anacrontab 定义了每天、每周、每个月要运行的任务。

周期性执行任务目录:

  • 每天要执行的任务目录:/etc/cron.daily
  • 每周要执行的任务目录:/etc/cron.weekly
  • 每月要执行的任务目录:/etc/cron.monthly

/etc/anacrontab 使用语法 NAME=value 配置 anacrontab。

例如,START_HOURS_RANGE=3-22,作业只能在此时间段运行。

/etc/anacrontab 每行包涵4个区域:

  • period in days,按重复计划运行的作业的间隔天数。该字段接受整数或宏作为值。例如,宏@daily相当于整数1,它表示每天执行该作业。同样,宏@weekly相当于整数7,它表示每周执行该作业。
  • delay in minutes,在启动该作业前,crond守护进程应等待的时间。
  • job-identifier,此为/var/spool/anacron中的文件名称,用于检查该作业是否已运行。
  • command,要执行的命令

Linux 进程调度管理

进程调度器

现代计算机系统中既包含只有单个CPU且任何时候都只能处理单个指令的低端系统到具有几百个cpu、每个cpu有多个核心的高性能超级计算机,可以并行执行几百个指令。所有这些系统都有一个共同点:系统进程线程数量超出了CPU数量。

Linux系统看起来可以同时执行多个进程,多个进程轮流使用CPU。内核使用进程调度器决定如何分配CPU时间。为了更好地运行,进程调度器必须平衡不同的条件,快速决定下个执行的进程,确保进程获得公平的CPU时间:

  • 按时间片轮转(10-20ms为1个时间片 )
  • 按优先级调度,允许高优先级进程获取更多的共享CPU时间,低优先级进程获取更少的共享CPU时间。

进程调度器可粗略分为两类:

  • 实时调度器,系统中重要的进程由实时调度器调度,获得CPU能力强。
  • 非实时调度器,系统中大部分进程由非实时调度器调度,获得CPU能力弱。

实时调度器

实时调度器支持的调度策略:

  • SCHED_RR,roundrobin 轮训调度策略。相同优先级的进程轮流获取相同的CPU时间。
  • SCHED_FIFO,先入先出调度策略。被分配到的CPU时间的进程会一直运行,直到被IO阻塞(也称为sched_yield),会被高优先级进程抢占。

实时调度器管理的进程运行优先级范围如下:

在这里插入图片描述

非实时调度器

非实时调度器支持的调度策略:

  • SCHED_NORMAL,标准的轮询方式时间共享调度,也称为SCHED_OTHER
  • SCHED_BATCH,针对批量方式执行的进程策略。不像 SCHED_NORMAL 频繁竞争,任务可以长时间运行。
  • SCHED_IDLE,用于执行非常低的优先级应用。使用 SCHED_IDLE 调度策略运行的进程比nice 19运行的进程优先级还低。
init 0 关机
init 3 字符界面
init 5 图形化界面

管理进程优先级-非实时调度策略

nice 值

常规系统上运行的大多数进程都使用 SCHED_OTHER 调度策略。由于并非所有进程都同等重要,因此可以为使用SCHED_OTHER调度策略运行的程序指定相对优先级,称为nice值。

有40种不同级别的nice值,范围 -20(最高优先级)到 19(最低优先级):

  • nice 值越高,代表优先级越低,获取CPU能力越弱。
  • nice 值越低,代表优先级越高,获取CPU能力越强。

注意: 当不存在CPU资源竞争时,即使nice值高的进程也可以获得足够CPU资源。

ps命令

[yy@server ~ 11:45:08]$ ps -o nice,cmd $(pgrep systemd)
 NI CMD
  0 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
  0 /usr/lib/systemd/systemd-journald
  0 /usr/lib/systemd/systemd-udevd
  0 /usr/lib/systemd/systemd-logind




[yy@server ~ 13:59:49]$ md5sum /dev/zero &
[1] 12977
[yy@server ~ 14:00:16]$ ps -o pid,nice,command $$ 12977
   PID  NI COMMAND
  1965   0 -bash
 12977   0 md5sum /dev/zero

优先级最低的实时调度器进程的优先级高于优先级最高的非实时调度器进程的优先级。

nice 命令

[root@server yy 14:06:42]# nice -n -2 md5sum /dev/zero &
[1] 13164
[root@server yy 14:06:46]# ps -o pid,nice,command 13164
   PID  NI COMMAND
 13164  -2 md5sum /dev/zero
[root@server yy 14:07:17]# exit
[yy@server ~ 14:08:46]$ nice -n -2 md5sum /dev/zero &
[4] 13187
[yy@server ~ 14:08:57]$ nice: 无法设置优先级: 权限不够
^C
[yy@server ~ 14:09:00]$ ps -o pid,nice,command 13187
   PID  NI COMMAND
 13187   0 md5sum /dev/zero
 
 #renice 命令
 #修改优先级
 #普通用户只能升高进程nice值,不能降低。
[yy@server ~ 14:09:24]$ renice -n 2 13118
13118 (进程 ID) 旧优先级为 0,新优先级为 2




在这里插入图片描述

管理进程优先级-实时调度策略

chrt 命令用于获取和设置实时调度器进程优先级,以及更改进程调度器

查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。

[root@server ~ 14:12:57]# chrt -m
SCHED_OTHER min/max priority	: 0/0
SCHED_FIFO min/max priority	: 1/99
SCHED_RR min/max priority	: 1/99
SCHED_BATCH min/max priority	: 0/0
SCHED_IDLE min/max priority	: 0/0
SCHED_DEADLINE min/max priority	: 0/0
# 修改进程调度器和优先级
[root@server ~ 14:20:17]# chrt -r 5 md5sum /dev/zero &
[1] 13366
[root@server ~ 14:20:39]# ps -o pid,cls,command 13366
   PID CLS COMMAND
 13366  RR md5sum /dev/zero
[root@server ~ 14:20:59]# chrt -f --pid 10 13366
[root@server ~ 14:21:36]# ps -o pid,cls,command 13366
   PID CLS COMMAND
 13366  FF md5sum /dev/zero
[root@server ~ 14:22:43]# ps -o pid,cls,rtprio,command 13366
   PID CLS RTPRIO COMMAND
 13366  FF     10 md5sum /dev/zero
 
 # 修改进程调度器为非实时
[root@server ~ 14:22:51]# chrt -o --pid 0 13366
[root@server ~ 14:24:13]# ps -o pid,cls,rtprio,command 13366
   PID CLS RTPRIO COMMAND
 13366  TS      - md5sum /dev/zero

mmand 13366
PID CLS RTPRIO COMMAND
13366 FF 10 md5sum /dev/zero

修改进程调度器为非实时

[root@server ~ 14:22:51]# chrt -o --pid 0 13366
[root@server ~ 14:24:13]# ps -o pid,cls,rtprio,command 13366
PID CLS RTPRIO COMMAND
13366 TS - md5sum /dev/zero


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值