1、crond 任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。
crontab 进行定时任务的设置,提交的任务由服务器程序crond调度。
at提交的作业是一次性的(后面会讲),而crontab提交的作业是重复性的、永久性的,当crontab被设定好了之后,在下一次被修改之前,crond将一直按其内容的规定调度程序执行。
系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等。
个别用户可能希望执行某些程序,比如对mysql数据库的备份。
用法: crontab [选项]
-e 编辑crontab定时任务
-l 列举出crontab任务文件内容
-r 删除当前用户所有的crontab任务文件
快速入门
设置任务调度文件:/etc/crontab
设置个人任务调度,执行crontab -e 命令
接着输入任务调度文件如:*/2 * * * * ls -l /etc/ > /home/ok.txt
//每隔2分钟执行ls -l /etc/ > /home/ok.txt命令,下面有详细的执行步骤
5个占位符的说明
第一个* 一小时当中的第几分钟 范围0~59
第二个* 一天当中的第几小时 范围0~23
第三个* 一个月当中的第几天 范围1~31
第四个* 一年当中的第几月 范围1~12
第五个* 一周当中的星期几 范围0~7(0和7都代表星期日)
crond 任务调度-特殊符号
特殊符号的说明
* 代表任何时间,比如第一个*就代表一小时中每分钟都执行一次的意思
,代表不连续的时间。比如0 8,12,16 * * *命令就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如0 5 * * 1-6 命令代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如*/10 * * * *命令,代表每10分钟就执行一遍
特定时间执行任务案例
20 20 * * * //在20点20分执行命令
0 16 * * 5 //每周5的16点0分执行命令
0 5 1,15 * * //每月1号跟15号的凌晨5点0分执行命令
0 9 * * 1-5 //每周一到周五的早上9点0分执行命令
*/10 8 * * * //每天的早上8点,每隔10分钟执行一次命令
0 0 1,15 * 2 //每月1号跟15号,每周2的0点0分都会执行命令,注意:星期几和几号最好不要同时出现,因为它们定义的都是天,非常容易让管理员混乱
应用实例
1、每隔一分钟,将当前日期和日历都追加到/home/mycal文件中
(1)vim /home/my.shell //(相当于先写个脚本)写入内容date >> /home/mycal和cal >> /home/mycal
(2) chmod u+x /home/my.shell //然后给my.shell增加执行权限
(3) crontab -e 增加*/1 * * * * /home/my.shell (写执行命令执行脚本,让其自动调度执行)
现在就是有个脚本/home/my.shell且是有权限的,要每隔1分钟自动执行
2、mysqldump -u 用户 -p 密码 数据库 >> /home/word.bak //每天完善20:00将mysql数据库txtdb ,备份到/home/word.bak文件中。
(1)crontab -e
(2) 0 2 * * * mysqldump -u word -p word testdb >> /home/word.bak
crond相关指令
crontab -r //终止任务调度
crontab -l //列出当前有哪些任务调度
service crond restart //重启任务调度
2、at 定时任务
apt-get install at //安装
at 命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间于当前时间匹配,则运行此作业。
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef //检测当前运行的进程有哪些
用ps -ef 命令查看有太多进程了一个个去看麻烦,可以选择grep管道过滤,只显示想要看到的
at 命令格式
at (选项) (时间) //Ctrl + D 结束at命令输入,输入两次才行
-m //作业完成后向用户发送邮件
-v // 显示任务将被执行的时间
-c // 打印任务的内容到标准输出
-q <queue> // 使用指定的队列
-f <file> // 从指定文件读入任务而不是从标准输入读入
at 18:30 -f myjob //从myjob中读取作业并规定在18:30分执行
-t <time> //以时间参数的形式提交要运行的任务
at指定时间的方法:
1、接受在当天的hh:mm(小时:分钟)式的时间指定。默认日期是当天,若当天时间已经过去了,则放在第二天执行。例如:02:00
2、时间后可以加上AM(上午)或PM(下午),不然默认为24小时制。
3、使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
4、指定命令执行的具体日期,指定格式为month day (月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-12-19
5、使用相对计时法。指定格式为: now+count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、day(天)、weeks(星期)。count是时间数量,几天,几小时。例如now + 5 minutes
6、直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
at定时任务
2天后的下午5点执行/bin/ls/home
atp命令来查看系统中没有执行的工作任务
明天早上6点钟,输出时间到指定文件内,比如/root/date18.log
1分钟后,输出时间到指定文件内,比如/home/20.log
删除已经设置的任务,atrm + 编号