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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY