9、任务计划
概要
计划任务主要是做周期性的任务,主要是定期备份数据
计划任务分为两类:
- 一次性调度执行
- 循环调度执行
at:一次性定时任务
at命令的功能是用于设置一次性定时计划任务,是Linux系统中常用的计划任务工具之一,会以atd守护进程的形式在后台模式运行。一旦设置的计划任务被执行,则该任务就会被从任务列表库中删除,因此常被用于仅需执行一次的工作。
语法格式:
- at [timespec]:交互式输入,按Ctrl+d结束输入
- at [参数] [任务计划]
常用参数
| 参数 | 描述 |
|---|---|
| -b | 设置批处理命令的别名 |
| -c | 显示指定任务的内容 |
| -d | 删除系统中的等待任务 |
| -f | 将指定文件提交等待任务 |
| -l | 显示系统中的全部任务 |
| -m | 任务完成后给用户发邮件 |
| -M | 从不向用户发邮件 |
| -q | 使用指定的队列 |
| -r | 删除指定的任务作业 |
| -t | 以时间的形式提交运行任务 |
| -V | 显示版本信息 |
使用示例
-
让系统五分钟后执行命令:useradd user03
[root@localhost ~]# at now +5 min at> useradd user03 // 用户输入定时结束后要执行的指令 at> <EOT> // 按Ctrl+d结束输入 job 4 at Sat May 4 17:42:00 2024 // 输入完成后系统显示任务号和执行时间 -
让系统一天后执行命令:useradd user04
[root@localhost ~]# at noon +1 days at> useradd user04 at> <EOT> job 5 at Sun May 5 12:00:00 2024 -
显示系统中全部一次性任务
[root@localhost ~]# at -l 3 Sun May 5 12:00:00 2024 a root 5 Sun May 5 12:00:00 2024 a root -
删除指定的任务5
[root@localhost ~]# at -r 5 -
在2024年5月10日的当前时刻,执行文件:/usr/local/nginx/sbin/nginx
[root@localhost ~]# at -f /usr/local/nginx/sbin/nginx 05/10/2024 job 6 at Fri May 10 17:46:00 2024 -
在当天的23:00执行文件:/usr/local/nginx/sbin/nginx
[root@localhost ~]# at -f /usr/local/nginx/sbin/nginx 23:00 job 7 at Sat May 4 23:00:00 2024
循环调度任务
概要
cron:周期性计划任务,也叫循环调度任务
croud程序是运行计划任务的基程序
-
查看croud的进程
[root@localhost spool]# ps -aux | head -1;ps -aux | grep crond USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1125 0.0 0.0 126384 1684 ? Ss 17:24 0:00 /usr/sbin/crond -n -
查看croud的服务
[root@localhost spool]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 六 2024-05-04 17:24:09 CST; 48min ago Main PID: 1125 (crond) Tasks: 1 CGroup: /system.slice/crond.service └─1125 /usr/sbin/crond -n 5月 04 17:24:09 localhost.localdomain systemd[1]: Started Command Scheduler. 5月 04 17:24:09 localhost.localdomain crond[1125]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 22% if used.) 5月 04 17:24:10 localhost.localdomain crond[1125]: (CRON) INFO (running with inotify support)
cron文件
计划任务存储在目录:/var/spool/cron 下
当用户创建计划任务后,会在目录/var/spool/cron下面创建一个与用户名同名的文件
计划任务格式
* * * * * command
上面五个*从左到右分别表示:分、时、天、月、周。command表示要执行的命令
字段范围
| 字段 | 取值范围 |
|---|---|
| 分 | 0到59之间的整数 |
| 时 | 0到23之间的整数 |
| 日 | 1到31之间的整数 |
| 月 | 1到12之间的整数 |
| 周 | 0到7之间的整数,0或7表示星期日 |
5个*可用的语法
| 规则 | 说明 |
|---|---|
| * | 表示匹配该栏位的每一个时间点 |
| x-y | 表示范围:x到y,包含x和y |
| x,y | 表示列表:x和y。也可以表示范围,如:5,10-15,20 |
| */x | 表示每x个时间点都执行一次 |
-
示例1:表示在每年的6月10日12时05分看一下tmp目录下面有什么东西
5 12 10 6 * ls /tmp -
示例2:表示每五分钟看一下tmp里面有什么东西
*/5 * * * * ls /tmp -
示例3:每个月的10号到20号的11点05分看一下tmp里面有什么东西
5 11 10-20 * * ls /tmp -
示例4:每年的1,3,5月的1号0点0分看一下tmp里面有什么东西
0 0 1 1,3,5 * ls /tmp -
示例6:每分钟都看一下tmp里面有什么东西
* * * * * ls /tmp -
示例7:每月的10号,15到20号,25号的0点0分看一下tmp里面有什么东西
0 0 10,15-20,25 * ls /tmp -
示例8:每个星期五的8点30分看一下tmp里面有什么东西
30 8 * * 5 ls /tmp
crontab:管理周期计划任务
词组cron table的缩写,其功能是管理定时计划任务。定时计划任务,顾名思义就是计划好的任务,到了时间就会自动执行。
在Linux系统中,crond是一个定时计划任务服务,用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入配置文件,那么就会按照预定的周期时间自动执行,而crontab命令则是用于配置定时计划任务的工具名称。
语法格式:crontab 参数 对象
常用参数
| 参数 | 描述 |
|---|---|
| -e | 设置任务 |
| -i | 删除前询问用户是否确认 |
| -l | 显示任务 |
| -r | 删除任务 |
| -u | 设置用户名 |
| --help | 显示帮助信息 |
使用示例
-
设置周期计划任务
[root@localhost spool]# crontab -e // 如果是该用户第一次设置周期任务,则会出现如下提示 no crontab for root - using an empty one crontab: installing new crontab输入该命令后,会进入文本编辑模式,与vim的用法一模一样
在文本文件中安装任务计划格式输入即可
使用wq命令保存退出后,在目录/var/spool/cron下创建与用户名同名的文件,里面存放的就是任务计划
如下:
[root@localhost cron]# cd /var/spool/cron/ [root@localhost cron]# ls root [root@localhost cron]# cat root */10 * * * * ls /tmp // 每十分钟看一下tmp里面有什么东西 -
为其他用户:liu设置计划任务,只有管理员才可以
[root@localhost cron]# crontab -e -u liu no crontab for liu - using an empty one crontab: installing new crontab// 验证是否设置成功 [root@localhost cron]# ls liu root [root@localhost cron]# cat liu */20 * * * * ls /etc -
查看当前用户已有的计划任务列表
[root@localhost cron]# crontab -l */10 * * * * ls /tmp -
删除当前用户的任务计划
[root@localhost cron]# crontab -r -
删除指定用户:liu的 计划任务
[root@localhost cron]# crontab -u liu -r

浙公网安备 33010602011771号