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

相关推荐

  • VMware vSphere所需要开放的端口

        80 vCenter Server需要端口80用于直接HTTP连接。端口80会将请求重定向到HTTPS端口443。如果意外使用了http://server而不是https://server,此端口将非常有用。     389 此端口在vCenter Server的本地和所…

    Linux干货 2016-07-07
  • LAMP基于RPM包实现(httpd与php以fastcgi方式结合) 2

    概述:     承接上篇,本篇为介绍下利用rpm包,实现LAMP组合,其中httpd和php的结合方式为fastcgi,也就是php运行为独立的服务,监听的某个套接字上,接受请求,提供服务     包括LAMP安装过程(http、php-fpm、mysql-server、php-…

    Linux干货 2016-10-15
  • hbase安装配置(整合到hadoop)

    1.  快速单击安装 在单机安装Hbase的方法。会引导你通过shell创建一个表,插入一行,然后删除它,最后停止Hbase。只要10分钟就可以完成以下的操作。 1.1下载解压最新版本 选择一个 Apache 下载镜像:http://www.apache.org/dyn/closer.cgi/hbase/,下载 HBase Re…

    Linux干货 2015-04-13
  • 设计模式(十)享元模式Flyweight(结构型)

    相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放。我们只是为了学习而简单做了介绍。 1. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。…

    Linux干货 2015-07-08
  • 马哥教育网络班20期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干货 2016-07-04