目录
计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据
计划任务的安排方式分两种:
一种是定时性的,也就是例行。就是每隔一定癿周期就要重复来做这个事情
一种是突发性的,就是这次做完了这个事,就没有下一次了,临时决定,只执行一次的任务
at 和 crontab 命令:
at:它是一个可以处理仅执行一次就结束的指令
crontab:它是会把你指定的工作或任务,比如:脚本等,按照你设定的周期一直循环执行下去
1.at 命令
语法格式: at 时间 服务:atd (at是命令,d是进程)
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl status atd #查看atd服务是否启动。默认启动
[root@localhost ~]# systemctl is-enabled atd #查看是否开机启动,(enabled)
在 Centos6 查看开机启动服务:
[root@localhost ~]# chkconfig --list | grep atd
1.1实战-使用 at 创建计划任务
第一步:date命令查看一下Linux中的当前时间。(和windows可能不一致)
第二步:输入命令+时间:[root@localhost ~]# at 20:46
第三步: 输入要执行的任务
at> mkdir /xxhf
at> touch /xxhf/hf01
at> <EOT> #结束:ctrl+d
第四步:查看[root@localhost ~]# at -l #查看计划任务
[root@localhost ~]# atq #查看计划任务
第五步:检查 at 计划任务运行结果
[root@localhost ~]# ls /xxhf/hf01
查看计划任务文件及内容
第一步:[root@localhost ~]# at -l #先查看任务编号
第二步:[root@localhost ~]# at -c 5 #通过编号查看计划任务内容
或
[root@localhost ~]# ls /var/spool/at/ #查看计划任务文件
a00003018452cb a0000501845084 spool
第二步:[root@localhost ~]# tail -5 /var/spool/at/a0000501845084
#查看执行任务文件内的具体内容
at 计划任务的特殊写法
[root@ localhost ~]# at 20:00 2018-10-1 #某天
[root@ localhost ~]# at now +10min #在 10 分钟后执行
[root@ localhost ~]# at 17:00 tomorrow #明天下午 5 点执行
[root@localhost ~]# at 6:00 pm +3 days #在 3 天以后的下午 6 点执行
[root@localhost ~]# at 23:00 < a.txt #输入重定向,把文件a.txt内的任务输入到at命令内
删除 at 计划任务
语法: atrm 任务编号
第一步:[root@localhost ~]# at -l #查看到任务编号
3 Tue May 22 08:43:00 2018 a root
5 Mon May 21 23:00:00 2018 a root
第二步:[root@localhost ~]# atrm 5 #根据编号来删除
第三步:[root@localhost ~]# at -l #查看确认
3 Tue May 22 08:43:00 2018 a root
2.crontab 命令
启动 crond 服务
[root@localhost ~]# systemctl start crond
[root@localhost ~]# systemctl enable crond
cron 命令参数介绍:
crontab 的参数:
crontab -u user1 #指定 user1 用户的cron 服务
crontab -l #列出当前用户下的 cron 服务的详细内容
crontab -u user1 -l #列出指定用户 user1 下的 cron 服务的详细内容
crontab -r #删除 cron 服务
crontab -e #编辑 cron 服务
例如:
crontab -u root -l #root 查看自己的 cron 计划任务
crontab -u user1 -r #root 想删除user1 的 cron 计划任务
cron -e 编辑时的用法
*(分) *(时) *(日) *(月) *(周) 需要执行的命令
2.1创建计划任务
例 1:每天凌晨 2 点 1 分开始备份数据
[root@localhost spool]# crontab -e #添加计划任务
1 2 * * * tar zcvf /opt/grub2.tar.gz /boot/grub2
[root@localhost ~]# crontab -l #查看
例 2:以非 root 用户添加计划任务。这里使用 user1 用户来添加
[root@localhost ~]# crontab -u user1 -e
*/1 * * * * echo "aaaaaaa" >> /tmp/user1.txt
排查:
[root@localhost ~]# crontab -u user1 -l
*/1 * * * * echo "aaaaaaa" >> /tmp/user1.txt
2.2如何排查所有用户的计划任务?
注:所有用户的计划任务,都会在/var/spool/cron/下产生对应的文件
[root@localhost ~]# ll /var/spool/cron/
-rw------- 1 root root 42 Nov 12 10:11 bin
-rw------- 1 root root 19 Nov 12 10:06 root
3.系统级别的计划任务:
[root@localhost etc]# ll /etc/crontab
#这个是系统任务调度癿配置文件
可以直接在/etc/crontab 中添加计划任务 :
[root@localhost etc]# vim /etc/crontab
定时周期:
[root@localhost bin]# ls /etc/cron
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab
注:
cron.d/ #是系统自动定期需要做的任务。
cron.deny #控制用户是否能做计划任务的文件;
cron.monthly #每月执行的脚本;
cron.weekly/ #每周执行的脚本;
cron.daily/ #每天执行的脚本;
cron.hourly/ #每小时执行的脚本;
crontab #主配置文件 也可添加任务;
4.实战-常见的计划任务写法和案例
常见写法:
1.每天晚上 21:00 重启 apache
0 21 * * * /etc/init.d/httpd restart
2.每月 1、10、22 日的 4 : 45 重启 apache。
45 4 1,10,22 * * /etc/init.d/httpd restart
3.每月 1 到 10 日的 4 : 45 重启 apache。
45 4 1-10 * * /etc/init.d/httpd restart
4每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行 apach
3,15 8-11 */2 * * /etc/init.d/httpd restart
5.晚上 11 点到早上 7 点之间,每隔一小时重启 apach
0 23-7/1 * * * /etc/init.d/apach restart
6.周一到周五每天晚上 21:15 寄一封信给 root@panda:
15 21 * * 1-5 mail -s "hi" root@panda < /etc/fstab
5.at 和 cron 黑白名单问题:
/etc/at.deny #at 黑名单,默认存在。
/etc/cron.deny #cron 黑名单,默认存在。
/etc/at.allow #at 白名单,默认丌存在。
/etc/cron.allow #cron 白名单,默认丌存在。
黑白名单之间哪个优先级更高?
白名单优先级更高
如果想把某个用户写入at命令的黑名单内:
先创建at 的黑名单文件:touch /etc/at.deny
然后用vim打开,写入用户名即可
注:要写入多个用户时,一行只能写一个用户名