关键词:at , batch , crontab ;
相关知识点:
本地电子邮箱服务:
smtp:simple mail transmission protocol,简单邮件传输协议;端口号(SMTP:25; SMTP SSL:465 ; SMTP TLS:587);
pop3:Post Office Procotol,邮局协议,端口号(POP3:110 ; POP3 SSL:995);
imap4:Internet Mail Acess Procotol,交互式邮件存取协议,端口号(IMAP:143 ; IMAP SSL:993);
mail命令:
mailx – send and receive Internet mail
mailx [-s “SUBJECT”] USERNAME[@HOSTNAME]
-s “SUBJECT” : 指定邮件标题;
@HOSTNAME : 指定邮箱服务器的主机名,如果是发送到本机的其他用户,主机名可省略;
邮件正文的生成方式:
1> 交互式输入:上面命令输入完成回车后,手动收入邮件正文;’.’ 点号单独成行,敲回车键后表示正文结束(也可使用组合键:ctrl+d),同时发送邮件;
2> 通过输入重定向;
3> 通过管道命令;
MUA: Mail User Agent,邮件用户代理,邮件客户端,比如Foxmail、outlook等邮件代理工具;
==========================
1、任务计划类型
未来的某个时间点执行一次某个任务,使用工具:at , batch ;
周期性执行某任务,使用工具:crontab ;
任务执行结果,系统通过邮件自动发送给用户;
2、at命令
at [OPTION]… TIME
OPTION:
-l : 查看作业队列,相当于命令’atq’;
-f /PATH/FROM/SOMEFILE : 从指定文件中读取作业任务;不使用此选项参数的话,默认是交互式输入,按组合键’ctrl+d’做为结束符;
-q QUEUE : 指定执行排列的队列名称,队列名称用单个字母(大小写字母均可)表示;默认以’a’队列进行排列;
-c QUEUE_NUMBER : 查 看指定队列序号的任务内容;
-r, -d QUEUE_NUMBER : 删除指定队列序号的任务,相当于命令’atrm’;
TIME:
(时间表达格式有多种,以下列出只是部分)
HH:MM[YYYY-mm-dd] 表示小时:分钟[4位数年份-2位数月份-2位数日期];
noon: 表示中午12点; midnight: 表示午夜12点; teatime: 表示下午4点; tomorrow: 表示明天;
now+#UNIT : 表示从现在开始计算未来的’#'[分钟,小时,天,星期]执行任务,UNIT表示时间的单位,[min,hour,day,week];
3、batch命令
batch命令特性:让系统自行选择在系统资源较空闲的时间去执行指定的任务,无需人工手动指定时间;
batch: 命令行输入,回车后即可输入需要执行的命令;
4、周期性计划任务:cron
4.1 服务程序
cronie : 主程序包,提供了crond守护进程及相关服务工具;
[root@kouyuushinn ~]# cron crond crontab [root@kouyuushinn ~]# cron
查看crond守护进程(daemon)是否处于运行状态:
Centos 7运行命令: ~]# systemctl status crond.service
Centos 5运行命令: ~]# service crond status
[root@kouyuushinn ~]# [root@kouyuushinn ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-05-08 10:14:20 CST; 24h ago Main PID: 750 (crond) CGroup: /system.slice/crond.service └─750 /usr/sbin/crond -n May 08 10:14:20 kouyuushinn.cn systemd[1]: Started Command Scheduler. May 08 10:14:20 kouyuushinn.cn systemd[1]: Starting Command Scheduler... May 08 10:14:21 kouyuushinn.cn crond[750]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.) May 08 10:14:21 kouyuushinn.cn crond[750]: (CRON) INFO (running with inotify support) [root@kouyuushinn ~]# [root@kouyuushinn ~]# service crond status Redirecting to /bin/systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-05-08 10:14:20 CST; 24h ago Main PID: 750 (crond) CGroup: /system.slice/crond.service └─750 /usr/sbin/crond -n May 08 10:14:20 kouyuushinn.cn systemd[1]: Started Command Scheduler. May 08 10:14:20 kouyuushinn.cn systemd[1]: Starting Command Scheduler... May 08 10:14:21 kouyuushinn.cn crond[750]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 6% if used.) May 08 10:14:21 kouyuushinn.cn crond[750]: (CRON) INFO (running with inotify support) [root@kouyuushinn ~]#
4.2 cron任务提交方式与任务分类
任务提交方式:
向crond提交作业的方式与’at’命令提交方式不同,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件;需要使用命令’crontab’创建作业任务;
cron任务分类:
系统cron任务:主要用于实现系统自身的维护;手动编辑配置文件”/etc/crontab”;
用户cron任务:使用命令’crontab’命令进行创建,配置文件”/var/spool/cron/USERNAME”;
系统cron的配置文件格式:
[root@kouyuushinn ~]# [root@kouyuushinn ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed [root@kouyuushinn ~]# 1> 每行定义一个周期性任务,共7个字段:分 时 日 月 星 用户名 命令; 每行具体格式表示:* * * * * user-name command to be executed 2> 此处的环境变量不同于普通用户登录系统后获取到环境变量,因此,建议使用绝对路径的命令格式,或可通过自定义PATH环境变量; 3> 执行结果,系统通过邮件方式自动发给指定用户;
用户cron的配置文件格式:
[root@kouyuushinn ~]# crontab -u lucifer -l */5 * * * * /bin/echo "first crontab ." */10 * * * * /bin/echo "first crontab ." [root@kouyuushinn ~]#
4.3 cron的时间表示法:
* * * * * user-name command to be executed
1> 特定值:给定时间点有效取值范围内的值;’day of week’和’day of month’一般不同时使用;
2> * : 给定时间点上有效取值范围内的所有至;表示”每[单位]”;
5 * * * * : 表示每小时任务,每小时的第5分钟;
5 9 * * 5 : 表示每周任务,每周五的9点5分;[day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat]
4 7 12 * * : 表示每月任务,每月的12号7点4分;
7 8 9 11 * : 表示每年任务,每年的11月9日8点7分;
3> 给定时间点有效取值范围内的离散取值:
在时间点上使用逗号’,’分隔多个值;
25 8 * * 1,4 : 每周一和周四的8点25分;
0 8,20 * * 3,7 : 每周三和周日的8点、20点;
4> 连续取值:在时间点上使用横线’-‘连接开头时间和结束时间;
0 8-18 * * 1-5 : 表示周一到周五(工作时间)的8点到18点;
5> 在指定时间点上,定义步长:使用正斜线’/’; /# : #表示步长;
*/5 * * * * : 每5分钟(每隔5分钟);
*/7 * * * * : 每隔7分钟;
注:
指定的时间点不能被步长整除时,其意义将不复存在;
最小时间单位是”分钟”,想要完成”秒”级任务,需要借助额外机制;
解决方案: cron定义每分钟任务,利用shell脚本实现在每分钟内循环执行多次来实现;
4.4 crontab命令
crontab [-u user] [-l | -r | -e] [-i]
OPTION:
-u user : 只有root用户可使用,表示root用户为其他普通用户创建cron任务;
-l : 列出所有任务;
-r : 删除所有任务;如果是普通用户,则会删除’/var/spool/cron/USERNAME’文件;
-i : 在使用’-r’选项删除所有任务时,提示用户确认;
-e : 编辑cron任务;每条任务独立成行;如果需要删除某条任务,可通过此选项打开文件后对指定行的任务进行删除即可;
NOTE :
1> 运行结果默认会以邮件方式通知给当前用户(任务的执行者);如果拒绝接收邮件,可通过下面的方式:
COMMAND > /dev/null : 表示命令执行成功后,不会收到邮件;但如果命令执行时产生的错误信息依然会以邮件方式发送给用户;
COMMAND &> /dev/null : 表示无论是正确或错误的信息,都不会发送邮件给用户;
2> 定义COMMAND时,如果命令需用用到’%’,则需要对其进行转义;但’%’放置在单引号中时,不用转义也可;
3> 某任务在指定时间因故关机,未能执行,下次开机后也不会自动执行;
如果期望在下次开机后,无论是否到了相应时间点,都希望其执行一次,可使用’anacron’实现;