1.基础概念

Linux可以通过atbatch来设定任务执行计划,让任务在指定时间点运行,运行的结果将会以邮件的形式告知给设定运行计划的用户。如果需要周期性运行某任务则要用到cron命令

 

2.相关命令

2.1mailx

用途:mailxlinux的内置邮箱处理工具,可以用来查看发送邮件。一般电子邮件服务包含如下三种协议smtp(简单邮件传输协议,用于传送邮件)、pop3(邮局协议,用来收邮件)、imap(因特网邮件传输协议,用来收邮件)。Imap邮件协议目前在企业中使用比较广泛,他能与服务器完成双向同步,比较适合多客户端操作。

邮件查看:

[root@localhost ~]# mailx                        ####输入mailx命令

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 4 messages

>   1 [email protected]  Thu Mar  9 15:43  90/2906  "[abrt] full crash report"             ####

            2 root                  Sat Jun  3 09:40  49/1208  "Output from your job        3"   ####

            3 root                  Sat Jun  3 15:34  16/542   "Output from your job        4"   ####

           4 root                  Sat Jun  3 20:40  19/623   "Hi                            ####

           &  

?注释:

           #(数字)+ 回车:查看指定序号的邮件

           delete  #(数字)+ 回车:删除指定序号的邮件

           l + 回车:列出可以操作的所有命令

           q + 回车:退出mailx命令。

发送邮件:

mailx [-s 'SUBJECT'] username[@hostname]

邮件正文的生成:

                    (1) 直接给出,Ctrl+d;

                    (2) 输入重定向;

                    (3) 通过管道;

                             echo -e "How are you?\nHow old are you?" | mail

 

2.2 at

用途:用于管理计划作业任务。

格式:at [ option ] TIME

           TIME:

                    HH:MM [ YYYY-mm-dd ] :指定具体几点几分执行,还可以加上年月日

                    noon:指定中午执行

                    midinight:午夜12点执行

                    teatime:下午茶时间执行,一般在下午5

                    now + #minutes,hours,days,weeks:现在时间为基点,多少分、小时、天、周后执行

常用选项:

           -q QUEUE:使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue

           -l :列出指定队列中等待运行的作业,相当于atq

           -d:删除指定作业,相当于atrm

           -c:查看具体的作业任务

           -f /path/form/somefile :从指定文件中读取任务

 

2.3 batch

用途:batch实际上也是调用at,让系统自动选择空闲时间去执行此处指定的任务;

2.4 cron

功能:管理周期性任务。

简介:

相关的程序包:

                    croniecron主程序包,提供了crond守护进程及相关辅助工具,如果要运行cron先使用systemctl status crondCentOS 7/service crond statusCentOS 6)命令确认crond是否运行。

                    cronie-anacroncronie的补充程序,用于监控cronie任务执行的情况,如果cronie程序设置的任务在设定的时间点未执行,则anacron会在随后启动一次此任务。

                    crontabs:包含CentOS提供的系统维护任务

系统cron任务:

通过编辑 /etc/crontab 文件来实现,编辑/etc/crontab文件这种方式仅限于root用户使用。

                             # 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    

示例:晚上9点10分备份一次 /etc  到/root/bakup下。

         # 10 21 * * * user-name cp -a /etc/root/bakup/

时间表示方法:

(1)   特定值:给定有效时间点,例如上述示例,指定晚上9点10分,通过10 21 * * * 来表示

(2)   * :给定时间点上所有有效值,比如将*写在分钟里则表示每分钟

(3)   离散取值 ,:指定某几个不连续的时间点例如“0 0 * * 1,3,5 ”则表示每周一、三、五的00:00执行作业

(4)   连续取值 -:指定一个取值范围,例如“0 1-3 * * *”则表示在每天1点、2点、3点执行作业。

(5)   定义步长 / :在指定的范围内定义步长,比如“*/10 * * * *”则表示每10分钟执行一次作业。即10分、20分、30分、40分、50分、60分各执行一次作业。

 

用户cron任务:

    用户使用crontab命令来定义周期性计划任务,每个用户都有一个专用的文件放置于/var/spool/cron/USERNAME,但是除root外的其他用户没有查看、编辑此文件的权限,只能通过crontab命令将计划任务按照规定格式写入到此文件中。

    格式:crontab [ -u user ] [ -l | -r | -e ] [ -i ]

    参数:

        -l :列出当前用户所有的任务

        -e :编辑任务

        -r :移除所有任务

        -i :同-r一起使用,以交互式模式让用户有选择的移除指定任务

 

        -u user :仅root用户可运行,root用户可代其他用户管理cron任务

 

sleep命令:

    用途:指定休眠时间,配合crontab可实现非秒级或不能被整除的时间表示

    格式:sleep NUMBER [ SUFFIX ]

        SUFFIX:

            s :秒,如果不填写suffix,默认都是秒

            m :分

            h:小时

            d:天

 

    注意点:

(1)   由于cron执行任务时使用的是自己的环境变量,所以建议使用命令的绝对路径。

(2)   由于运行结果都会以邮件通知相关用户,COMMAND > /dev/null表示只将执行错误的信息邮件通知用户,COMMAND &> /dev/null 表示不通过邮件通知相关用户执行结果

(3)   对于cron任务来说,%有特殊用途,所以命令中若是要使用%必须使用转义符\,不过如果把%放置于单引号中可不转义

 

示例:

(1)   在/root目录下有一个文件1,每10秒将date执行结果追加到文件1中。

[root@localhost cron]# crontab -e

no crontab for root - using an empty one

* * * * * sleep 10;date>>/root/1

* * * * * sleep 20;date>>/root/1

* * * * * sleep 30;date>>/root/1

* * * * * sleep 40;date>>/root/1

* * * * * sleep 50;date>>/root/1

~                                                                                                     

~                                                                                                     

~                                                                                                                                                                                                          

"/tmp/crontab.rZAyFQ" 5L, 165C written

crontab: installing new crontab

[root@localhost ~]# cat 1

Tue Jun  6 16:03:12 CST 2017

Tue Jun  6 16:03:22 CST 2017

Tue Jun  6 16:03:32 CST 2017

Tue Jun  6 16:03:42 CST 2017

Tue Jun  6 16:03:52 CST 2017

Tue Jun  6 16:04:11 CST 2017

Tue Jun  6 16:04:21 CST 2017

Tue Jun  6 16:04:31 CST 2017

Tue Jun  6 16:04:41 CST 2017

Tue Jun  6 16:04:51 CST 2017

Tue Jun  6 16:05:11 CST 2017

(2)   每4小时备份一次/etc目录至/root/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”。

* */4 * * * cp -a /etc /root/backup/etc;tar -Jcf /root/backup/etc-`date '+%Y-%m-%d-%H'`.tar.xz /root/ba

ckup/etc

(3)   每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

* * * * 0,2,4 cp -a /var/log/messages /logs/messages-`date '+%Y%m%d'`

(4)   每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

* */2 * * * cat /proc/meminfo|grep ^[SM].* >> /tmp/meminfo.txt

(5)   工作日时间内,每小执行一次“ip addr show”命令

* */1 * * 1-5 ip addr show