centos

sys.11.1 linux任务计划

 

关键词: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’实现;

Leave a Reply

Your email address will not be published. Required fields are marked *