1:定时任务
定时任务主要用于周期性的执行某些特定的任务,比如每天凌晨清理数据,每天中午统计登录人数等。程序猿总不能守着计算机到凌晨手动清理数据吧,或者总不能每隔半个小时统计一下在线人数吧。
在Linux系统下存在两种定时任务:
- at定时任务
- crontab定时任务调度
可以提前编码,系统到达执行时间便会自动执行代码,无需手动执行。
2:定时任务at
at作业 :将来某一时间要执行的作业列表,该任务只能被执行一次
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检测作业队列来运行。
- 默认情况下,atd收获进程60s检查作业队列一次,有作业会检查作业运行时间,如果运行时间和当前时间匹配,则运行此作业。
- at命令是一次性定时计划任务,执行完一次任务后就不会再执行。
- 在使用at命令时,一定要保证atd进程启动。
at任务 | 解释 |
---|---|
ps -ef | grep -n atd | 检测atd是否在运行 |
atq 或者 at-l | 查看定时任务队列 |
atrm 任务ID 或者 at - d 任务ID | 删除定时任务 |
at -v | 显示任务将被执行的时间 |
at-c | 打印任务内容到标准输出 |
实际操作:
#例1:半个小时后将在线用户写道user.txt文件中
[root@centos7 home]# at now + 30minutes
at> who >> user.txt #此处CTRL+D退出
[root@centos7 home]# at -l
9 Tue May 17 18:36:00 2022 a root
#例2:删除at任务
[root@centos7 home]# at -d 9
[root@centos7 home]# at -l #可以看到刚才的定时任务已经删除
#例3:明天下午五点,输出时间到指定位置
[root@centos7 home]# at 5pm tomorrow
at> date > /home/date.txt
[root@centos7 home]# atq
6 at Thu Apr 14 17:00:00 2022
#例4:两天后下午五点执行脚本
[root@centos7 home]# at 5pm + 2 days
at> sh test.sh
1 at Fri Apr 15 17:00:00 2022
关于at任务的时间规定:
midnight noon teatime | 比较模糊的时间来指定 |
AM上午 PM下午 12pm 下午12点 | 12小时制 |
month day 或 mm/dd/yy 或 dd.mm.yy 04:00 2021-02-12 | 日期需要跟在时间后 |
now + count time-units now + 5 minutes 当前时间五分钟后 | now当前时间 time-units时间单位 单位为minutes,hours,days,weeks count为时间数量 |
today tomorrow | 今天 明天 |
hh:mm(小时:分钟) 04:00 表示凌晨四点 | 当天执行,假如时间过去,则第二天执行 |
3:定时任务调度crontab
定时任务调度:指系统在某个时间执行的特定的命令或者程序
cron作业的分类:
-
系统cron作业:cron是一个守护进程,是一个标准的后台服 务程序,可以使系统周期性地执行某项任务。cron的配置文件为“/etc/crontab”
-
用户cron作业:
用户作业创建方式:
方式1:
第一步:首先利用vi创建cron作业列表文件,文件命名为filename (这个文件名随意起)
第二步:按规定格式创建好任务文件
第三步:用命令行crontab [ -u user] filename把它写入 “/var/spool/cron/username”文件中
方式2:
使用
crontab –e
直接编辑任务
crond任务 | 解释 |
---|---|
crontab -e | 编辑crontab定时任务 |
crontab -l | 查询crontab任务 |
crontab -r | 删除当前用户所有的crontab任务 |
符号*代表全部 | 功能 |
---|---|
第一个* | 一小时当中的第几分钟 [0-59] |
第二个* | 一天当中的第几小时 [0-23] |
第三个* | 一月当中的第几天 [1-31] |
第四个* | 一年当中的第几月 [1-12] |
第五个* | 一周当中的星期几 [0-7] (0,7代表周天) |
(1)每天早上9点和下午5点将在线人数保存到num文件中;
0 9,17 * * * who|wc –l > num
(2)周一至周五每2小时进行一次备份pub文件数据到data文件中;
0 */2 * * 1-5 cp pub data
(3)每周五下午5:30删除临时文件(/temp目录中的文件);
30 17 * * 5 rm -rf /temp/*
(4)每月1日8:30发消息给所有用户,要求提交上月的月度工作总结。
30 8 1 * * wall "Please submit last month’s work summary."
at VS cron
at和cron都可以提交作业,但cron主要用来提交不断循环执行的作业,at用来提交一段时间后执行的作业,执行完就删除作业。