周期性执行任务
1、未来的某时间执行一次某任务 at、batch
2、周期性运行某任务crontab
执行结果:会通过邮件发送给用户
邮件:
1只用于本机的邮件服务
2本机用户之间传递邮件
/var/spool/mail/username
注:不同于互联网的电子邮件,仅本机用户之间发送邮件
cenos5,6,7默认邮件功能都是开启的
检测邮件功能是否开启
ss -tnl
netstat -tnl
25号端口为服务端口处于监听状态
netstat -tnlp 显示出程序名称 master
本地电子邮件服务
smtp:用户向服务器发送邮件
用户收邮件:
pop3
imp4
mail命令
mailx:收发邮件
mua:用户收发邮件的程序(相当于windows下的foxmail)
发送
mailx -s ”hello centos“ centos 发送标题为hello centos 的邮件
how are you these days
. (点号结束邮件编写退出并发送)
接收邮件mail
&(选取邮件编号)查看邮件
&q退出
邮件正文的生成
1交互式输入,点号成行可以表示结束正文;ctrl+d
2通过输入重定向
3通过管道
at 命令
at[OPTION]...TIME
TIME:
HH:MM [YYYY-MM-DD]
noon(中午);midnight(半夜);teatime(下午4点)
tomorrow(明天)
now+#
#单位:minutes,hours,days,weeks
at now+2min
at > cat /etc/issue
at > ls /var
at > echo "hello there"
#ctrl+退出
at -l 显示任务查看作业队列
任务完成后自动发送邮件给用户
at的作业队列,用单个字母表示,默认都使用a队列
at -l=at q
at -f /path/from/somefile 从指定文件中读取任务
注vim输入命令即可,每行一个;而不用交互式输入
at -d # 删除任务 ,#作业号
at rm=at -d
[[email protected] ~]# at now +2min-----#2分钟后执行以下命令
at> cat /etc/issue
at> ls /dev
at> cat /etc/issue
at> ls /var
at> echo "hello there"
at> <EOT>---------------------#ctrl+d结束输入
[[email protected] ~]# at -l-----------------#列出队列
6 2016-07-22 18:24 a root
[[email protected] ~]# at -c 6---------------#显示队列内容
atrm
atq
atrun
attr
atd
注意:at支持使用脚本,但脚本中的命令最好给出绝对路径,因为环境变量可能与用户不一致导致出错。
batch命令
batch会让系统自动选择在系统资源相对较空闲的时候运行程序
周期性任务计划:cron
需要一个服务实时检测是否有满足时间的任务
centos6,7使用的服务为cronie
cronie主程序包,提供了crond守护进程及相关辅助工具
确保cron守护进程daemon处于运行状态
~]#systemctl status crond.service----------centos7查询服务状态
~]#service crond status--------------------centos6查询服务状态
向crond提交作业的方式不同于at,它需要使用专用的配置文件。且有固定格式,不建议使用文本编辑器编辑此文件,要用crontab命令
cron任务分为2类
系统cron任务:主要用于实现系统自身的维护
用户cron任务:用户自己定义的任务
系统cron任务 :手动编辑/etc/crontab文件
用户cron任务 :命令crontab /var/spool/cron/username
cron时间表示法
1特定值
给定时间点有效取值范围内的值
注:day of week和day of month一般不同时使用
*:星号 五个字段分别表示 分钟 小时 日 月 星期几
给定时间上有效取值范围内的所有值表示“每”
在哪一位上表示每“分,小时,天,星期,月..”
列如:
3 * * * *-------------每几点三分执行
3 4 * * 5-------------每周五四点三分执行
5 6 7 * *-------------每月的7号的6点5分执行
7 8 9 10 *------------每年的10月9号8点7分
2离散取值
在时间点上使用逗号分隔的多个值
例如
9 8 * * 3,7-----------每周三和周日的8点9分执行
0 8,20 * * 3,7--------每周三和周日的8点和20点执行
3连续取值
在时间点上使用——连接开头和结尾
#-#
例:
0 9-18 * * 1-5------------每周一和周五9点至18点每小时执行一次
4在指定时间上,定义步长
列:
*/5 * * * *---------每5分钟执行一次
注意:指定的时间点不能被步长整除时,其意义将不复存在
cond最小单位为分钟,向完成秒级任务,需要其他机制如:定义每分钟执行一次,而再利用脚本每三秒执行一次,循环多次。
crond命令
crond [-u user][-l|-r|-e][-i][-s]
-e 编辑任务
-l 列出所有任务
-r 移除所有任务
-i 在使用-r时提示用户确认
-u user root用可为指定用户管理cront任务
定义command时命令中需要用到“%”时需要使用转义或放到单引号中
思考:某任务在指定时间因关机未能执行,下次开机时会不会自动执行
答案:不会
如果期望某时间因故未能按时执行,下次开机时无论是否了相应时间点都要执行一次,可使用anacron实现
课外作业:anacron用法