任务计划的目的就是让任务能够在未来执行。因为如果当前时间执行某一个任务的时候,任务可能会消耗大量资源,影响线上用户的使用体验。所以我们需要使用任务计划定时执行任务。
一次性调度执行-at
只在未来的一个时间点执行命令。
语法格式
语法格式:at <TIMESPEC>
TIMESPEC示例:
- now+5min :5分钟后
- teatime(下午茶时间)、tomorrow
- noon+4days 第四天中午
实际使用
- 输入at
<TIMESPEC>
- 输入命令,可以多行多个命令
- 命令输入完成之后
ctrl +D
退出编辑 - 等待命令执行
- 可以使用
atq
查看计划汇总的任务
[root@localhost ~]# at now +2min
at> useradd uuuuu
at> <EOT>
job 2 at Thu Feb 8 21:20:00 2024
您在 /var/spool/mail/root 中有邮件
[root@localhost ~]# atq
2 Thu Feb 8 21:20:00 2024 a root
[root@localhost ~]# id uuuuu
uid=1003(uuuuu) gid=1003(uuuuu) 组=1003(uuuuu)
您在 /var/spool/mail/root 中有新邮件
循环调度执行-cron
在未来的多个时间点反复执行命令。
简介
cron是循环的意思,cron的概念和crontab是不可分割的。
crontab是一个命令,用于设置周期性的被执行的指令。该命令从标准输入命令读取指令,并将其存放于crontab
文件中,以供之后读取和执行。
crontab文件中以表格的形式存储着多条定时执行的命令。
查看进程状态
查看cron程序是否还在运行
如果已经不运行了,肯定是不能执行循环任务的。
crond程序
的运行是计划任务执行的根本。
ps axu | grep crond
或者
systemctl status crond.service
示例:
[root@localhost ~]# ps axu | grep crond
root 1411 0.0 0.0 126384 1688 ? Ss 20:07 0:01 /usr/sbin/crond -n
root 116887 0.0 0.0 112824 980 pts/0 R+ 21:32 0:00 grep --color=auto crond
[root@localhost ~]# systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2024-02-08 20:07:55 CST; 1h 27min ago
Main PID: 1411 (crond)
Tasks: 1
CGroup: /system.slice/crond.service
└─1411 /usr/sbin/crond -n
2月 08 20:07:55 localhost.localdomain systemd[1]: Started Command Scheduler.
2月 08 20:07:56 localhost.localdomain crond[1411]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 65% if used.)
2月 08 20:08:05 localhost.localdomain crond[1411]: (CRON) INFO (running with inotify support)
cron执行示例
计划文件存储位置
- 计划文件存储位置:
/var/spool/cron
管理 cron命令
- 创建计划:
crontab -e
计划的执行者默认是谁创建谁执行,一行代表一个命令。
执行crontab -e
命令之后就进入一个编译器,用来编写文件命令,命令的格式是:* * * * * command
前五个星号分别代表:分、时、日、月、周(表示周的时候,1-6表示周一到周六,0或7表示周日)
command:代表要执行的命令
如果设置日和月的时候就不要设置周了,如果设置了周就不要设置日和月了。
5 1 15 3 * 命令
表示每年的3月15号1点5分都执行这个命令
5 1 15 * * 命令
表示每月的15号1点5分都执行这个命令(如果为*代表任意)
5 1 * * * 命令
表示每天1点5分都执行这个命令
* * * * * 命令
表示每分钟都执行
5 * * * * 命令
表示每小时的5分都执行这个命令
5 * * * * 命令
表示每小时的5分都执行这个命令
*/5 * * * * 命令
表示每隔5分都执行这个命令
5 1 1.4.6 * * 命令
表示每月的1号4号和6号的1点5分都执行这个命令(如果为*代表任意)
5 1 1-6 * * 命令
表示每月的1号到6号的1点5分都执行这个命令(如果为*代表任意)
0 * * * * 命令
每小时的0分执行任务。
0 2 * * 5 命令
每周五的2点执行。
0 2 2 6 5 命令
表示6越号+6月的每周五 都执行命令。
- 查询计划:
crontab -l
,查询创建成功的计划任务列表
任务计划执行完成之后会通过邮件将消息传递给你 - 删除计划:
crontab -r