一、简述
1.linux任务计划分为未来某一时间点任务计划和未来周期性任务计划。
2.at、batch:未来某一时间点任务计划
3.crontab :未来周期性计划
4.执行结果:任务执行后给用户发送邮件,
# netstat -tnlp
5.本地电子邮件服务
(1)smtp
(2)pop3
(3)imap
6.mail命令
centOS7 mail - send and receive Internet mail
发送邮件3种方法
(1)交互式输出,.(点)单独成行,表示正文结束;ctl+d也可提交;
mailx -s ‘hello,fun’ username@hostname
(2)通过输入重定向
[root@master tmp]# mailx -s ‘fun?’ tom@master < /tmp/cdx
(3)通过管道
[root@master tmp]# cat cdx | mailx -s ‘fun?’ tom@master
7.at命令,at作业有队列,用单个字母表示,默认从字母a开始。
at [option] time
time:
hh:mm [yyyy-mm-dd]
tomorrow
now+#
unit:minutes,hours,days,weeks
例:
交互式输入,ctl+d结束
常用选项:
-l:查看作业队列,等价于atq
-f:at -f /PATH/FROM/SOMEFILE time:从指定文件中读取作业任务,而不用再交互式输入;
-d:删除指定的作业,相当于atrm;at -d xx = atrm
-c:查看指定作业的具体内容;at -c xx
-q QUEUE:指明队列;at -q [a-z] time
注意:作业执行结果是以邮件发送给提交作业的用户。
8.batch命令:
batch会让系统自行选择在系统资源较空闲的时间去执行指定的任务;
二、周期性任务计划crond
1.确保crond的(daemon)守护进程处于运行状态
centOS7:systemctl status crond.service
Active: active (running)
2.周期性任务crond不同于at命令,它有固定配置文件及格式,建议不要手动vim去编辑,使用专有命令crontab编辑(报错有提示)
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
3.crond任务分两类:
(1)系统性crond任务:实现系统自身维护
手动编辑:系统任务默认配置文件保存在/etc/crontab文件。
(2)用户crond任务
crontab命令,配置文件位于:/var/spool/cron/username(同用户名)
4.crontab命令
crontab [-u user] [-l] [-e] [-i] [-r]
-l:查看所有任务;
-e:编辑任务;
-r:删除用户的所有任务,即删除/var/spool/cron/username文件
-i:使用-r时,提示用户确认;
-u user:root用户可以指定用户管理cron任务:
注意;运行结果以邮件通知MAILO指定的用户,如果拒绝接受邮件(一定要确认任务执行成功,负责有风险!!!)
(1)command > /dev/null 命令执行成功情况
(2)command &> /dev/null 命令执行失败或者成功情况
(3)MAILTO=" ",mailto值为空,表示不发送执行任务邮件
注意:定义command命令时,如果命令用到%,需要对其转义,但放到单引号中的%不用转义。
5.系统cron的配置格式:/etc/crontab
注意:
(1)每一行定义一个周期性任务,共7个字段
* * * * * 定义时间周期
username 运行任务的用户身份
command to be executed:命令任务
(2)#号表示注释,不执行行
(3)此处的环境变量和用户登录后的环境变量不同,因此建议使用绝对路径,或者自定义path环境变量
(4)运行结果以邮件通知MAILO指定的用户,此处是root用户
(5)第四行加HOME变量指定在执行命令或者脚本时使用的主目录,HOME=/
6.用户cron配置格式:/var/spool/cron/username
注意:
(1)每行定义一个cron周期任务,共6个字段
(2)此处环境变量不同于用户登录后获得的环境,故建议使用绝对命令,或者自定义path环境变量
(3)邮件发送给当前用户
(4)第四行加HOME变量指定在执行命令或者脚本时使用的主目录,例HOME=/
7.时间表示
(1)特定值:给定时间点有效取值范围内的值:
注意:day of month 和day of week 建议不同时使用,可能在同一天
(2)*:给定时间点上有效取值范围的所有值:表示“每。。。”
(3)离散取值:,
在时间点上使用逗号分隔的多个值: #,#,#,#
(4)连续取值:-
在时间点上使用“-”连接开头和结束,#-#
(5)在指定时间上,定义步长
/#:#表示步长 ,例 /2
注意:
(1)指定时间点不能被步长整除时,其意义不存在
(2)最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助其它机制实现:
定义成每分钟任务:而在利用脚本实现每分钟之内,循环执行多次
例:
(1)3 * * * * :每小时执行一次,每小时的第3分钟
(2)3 4 * **:每天执行一次,每天的4点3分
(3)3 4 * * 5:每周执行一次,每周5的4点3分
(4)7 8 9 10 * :每年执行一次,每年的10月9号8点7分
(5)2 4 * * 2,4:每周2和周4的4点2分
(6)0 9-18 * * 1-5:每周1到每周5的9点到18点
(7)*/2 * * * *:每2分钟执行一次某任务
(8)*/7 * * * *: 无意义,不执行
(9)* * * * * :每分钟,也可写成 */1 * * * *
8.某任务在指定的时间因关机未能执行,下次开机会不会自动执行?
不会!.
如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;
9.练习
(1)每12小时备份一次/etc目录至/backups目录中,保存文件 名称格式为“etc-yyyy-mm-dd-hh.tar.xz”
(2)每周2、4、7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;
(3)每两小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;
* */12 * * * root cp -r /etc/ /backups/etc-$(date +"%F"-"%H").tar.xz
* * * * 2,4,7 root cp /var/log/secure /logs/secure-$(date +"%Y""%m""%d")
* */2 * * * root grep -E "^(S|M)" /proc/meminfo >> /tmp/meminfo