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

相关推荐

  • awk学习笔记

        awk是一种模式扫描和处理工具,相对于grep的查找,sed的编辑,它在对数据进行分析生成报表时显得尤为强大。awk通过逐行遍历一个或多个文件的方式,查找模式匹配到的行,而后以指定的分隔符(缺省为空格)进行切片,然后针对切片数据进行处理和分析。事实上,gawk有自己的语言,其本身就相当于一个解释器,允许用户创建…

    Linux干货 2015-08-04
  • N28-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作其默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
    (1)、创建组distro,其GID为2016;
    (2)、创建用户mandriva, 其ID号为1005;基本组为distro;
    (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
    (4)、给用户mageia添加密码,密码为mageedu;
    (5)、删除mandriva,但保留其家目录;
    (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
    (7)、修改slackware的默认shell为/bin/tcsh;
    (8)、为用户slackware新增附加组admins;

    2017-12-17
  • HTTP协议

    HTTP协议   HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP协议工作于客户端-服务端架构之上。浏览器作为HT…

    Linux干货 2017-02-15
  • shell脚本编程的执行语句

    顺序执行     从上到下逐条执行命令,执行完所有命令及退出。 选择执行     (1)&&,||     &&:代表and,&&左侧为真右侧则执行     ||:代表or…

    Linux干货 2016-08-24
  • 94-HAProxy

    一. HAProxy简介 1. LB CLuster:

    2016-11-18
  • Linux pxe服务

                     Linux pxe服务 pex工作过程:   客户机从自己的pxe网卡启动,向本网络中的DHCP服务器请求IP地址及子网掩码,此时DHCP服务器返回分给客户机的IP地址和子网掩码,并告知客户机bootstrap文件的…

    系统运维 2016-11-18