Linux计划任务

Linux任务计划

Linux任务计划、周期性执行任务
未来某一时间点执行一次任务:at,batch
周期性计划任务:crontab
    默认执行结果会通过邮件形式发送给用户

本地电子邮件服务

smtp:Simple Mail Transfer Protocol,既简单邮件传输协议,主要用于发送邮件
pop3:Post Office Protocol,邮局协议,用于收取邮件
IMAP4:Internet Mail Access Protocol,互联网邮件访问协议,其功用和pop3一致

mail命令:
    用于发送或接收互联网邮件
        MUA:Mail User Agent,用户收发邮件的工具程序

        mailx [-s "SUBJECT"] username[@hostname]
            邮件正文的生成:
                (1)交互式输入:.单独成行可以表示正文结束;Ctrl+d提交
                (2)输入重定向:
                (3)通过管道;

_[$V]1`UC0C9PAVE48O`[)N.png

7Z5MIMH1BOCJVHD5P2`(ZX9.png

at命令

at [OPTIONS...] TIME
常用选项:
    -l:显示作业队列,相当于atq
    -d:删除指定队列,相当于atrm
    -c:查看作业的详细内容
    -m:当任务完成之后,将发邮件给用户,即使没有标准输出
    -V:显示版本信息
    -f /PATH/TO/SOMEFILE:

    注意:作业执行结果是以邮件发送给提交作业的用户

TIME:定义出什么时候进行at 这项任务的时间
    HH:MM 02:00
        在今日的HH:MM 进行,若该时刻已过,则明天此时执行任务
    HH:MM YYYY-MM-DD 04:00 2016-09-20
        规定在某年某月的某一天的特殊时刻进行该项任务
    noon, midnight, teatime(4pm)
    tomorrow
    now+#{minutes,hours,days, OR weeks}
        在某个时间点再加几个时间后才进行该项任务

at的作业有队列,用单个字母表示,默认都是用a队列

执行方式:
    1.交互式输入
    2.输入重定向,从指定文件中读取
    3.at -f /PATH/TO/SOMEFILE指定文件

at依赖于atd服务,需要启动atd服务才可运行at任务
at队列存放在/var/spool/at目录当中

at权限控制

/etc/at.{allow,deny}用于控制用户是否能执行at任务
    白名单:/etc/at.allow默认不存在,只有该文件中的用户才可执行at任务
    黑名单:/etc/deny拒绝该文件中用户执行at命令,而没有在at.deny文件中的用户则可执行

注意:如果at.deny和at.allow文件中同时定义了一个用户,则at.allow文件优先生效
注意:如果两个文件都不存在,则只有root用户才可执行at任务;或者at.allow文件存在且没有指定任何用户

周期性计划任务:crontab

服务程序:
    cronie:主程序包,提供了crond守护进程及相关辅助工具;

确保crond守护进程(daemon)处于运行状态;
    CentOS 7:
        systemctl status crond.service
    CentOS 6:
        service crond status
向crond提交作业的方式不用于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器
    直接编辑此文件;要用crontab命令

cron任务分为两类:
    系统cron任务:主要用于实现系统自身的维护
        手动编辑:/etc/crontab文件
    用户cron任务:
        命令:crontab命令

    日志文件:/var/log/cron

系统cron的配置格式:/etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    # 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
    

    注意:
        (1)每一行定义一个周期性任务;
            * * * * *:定义周期性时间
            user-name:运行任务的用户身份
            command to be executed:任务
        (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量
        (3)执行结果邮件发送给MAILTO指定的用户


用户cron的配置格式:/var/spool/cron/USERNAME
    # 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    

    注意:
        (1)每行定义一个cron任务,共6个字段;
        (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量
        (3)邮件发送给当前用户


时间表示法:
    (1)特定值;
        给定时间点有效取值范围内的值;
            注意:days of week和day of month一般不同时使用
    (2)*
        给定时间点上有效取值范围内的所有值;表"每..."
    (3)离散取值:
        在时间点上使用逗号分隔的多个值;
            #,#,#
    (4)连续取值:-
        在时间点上使用-连接开头和结束
            #-#
    (5)在指定时间点上,定义步长:
        /#:#即步长;

        注意:
            (1)指定的时间点不能被步长整除时,其意义将不复存在
            (2)最小时间单位为"分钟",想完成"秒"级任务,得需要借助额外其它机制
               定义成每分钟任务:而在利用脚本实现在每分钟内,循环执行多次

示例:
    3 * * * *:每小时的第3分钟执行任务
    4 5 * * *:每天的5点4分执行任务
    3 4 * * 5:每周5的4点3分执行任务
    5 6 7 * *:每月的7号的6点5分执行任务
    7 8 9 10 *:每年的10月9号8点7分执行任务
    0 8,20 * * 3,7:每周3和周日的8点和20点执行任务
    0 9-18 * * 1-5:周1到周5的9点至18点钟执行任务
    */5 * * * *:每五分钟执行

crontab命令:
    crontab [-u user] [-l | -r | -e] [-i] [-s]
        -e:编辑计划任务
        -l:查看计划任务
        -r:清空计划任务
        -i:交互式,当使用-r选项时,提示用户是否继续
        -u USER:root用户可为指定用户配置cron任务

注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件
    (1)COMMAND > /dev/null
    (2)COMMAND &> /dev/null

注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%号不用转义

控制用户执行cron

/etc/cron.deny:黑名单,此文件中所定义的用户均不可执行cron任务
/etc/cron.allow:白名单,只有在此文件中定义的用户才可执行cron任务
    白名单优先级要高于黑名单,默认白名单不存在,如果存在,则只有白名单里定义的用户才可执行计划任务
    如果两个文件都不存在,则只有root用户才肯执行cron任务

原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/46514

(0)
zhai796898zhai796898
上一篇 2016-09-14
下一篇 2016-09-14

相关推荐

  • wk_01作业

    计算机 介绍 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机科学,而“计算机技术”指的是将计算机科学的成果应用于工程实践所派生的诸多技术性和经验性成果的总合。“计算机技术”与“计算机科学”是两个相关而又不同的概念,它们的不…

    Linux干货 2016-12-04
  • 马哥教育N22期第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@localhost ~]# egrep "^root|fedora|user1" /etc/passwd root:x:0:0:root:/root:/bin/bash fedora:x:1002:1002::/…

    Linux干货 2016-09-15
  • mount中-o的选项利用

        Mount下—-o 选项的各项用处  mount-o 选项 sync,async 同步模式,异步模式(defaults)         此选项的默认模式为异步模式。在同步模式下,内存的任何修改都会实时的同步到硬盘当中,这种模式的…

    2017-08-19
  • CentOS6系统启动流程

    概述     了解系统的启动流程,有助于我们了解Linux系统上的一些工作原理,有助于我们深入的理解一个系统的运作方式,那么本篇就以CentOS6系统为例,介绍一下有关Linux系统启动相关的内容,分为一下几个部分:     1、Linux系统的一些基础概念  &nbs…

    Linux干货 2016-09-09
  • 点名脚本

    脚本要求:1、随机抽点80以内的随机证书;                2、可以一次抽取多个随机数;同时间抽取的随机数要唯一;                3、被抽取之后的随机数,之后不会再抽取;…

    2017-05-08
  • N25第三周视频博客 find命令详解

    视频作业:find命令详解 大纲:         1、什么是find 2、find能实现什么功能 3、为什么要使用find 4、如何使用find 5、find各参数详解   1、什么是find      find是linux 命令,它将档案系统内符合 expression(表达…

    Linux干货 2016-12-15