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

相关推荐

  • Linux sed命令详则

    sed命令 sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前的行储存在临时缓存区中,称为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓存区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed…

    2017-08-11
  • Linux 第二天: (07月22日) 练习和作业

    Linux 第二天: (07月22日) 练习和作业         echo 显示闪烁, 下划线, 彩色, 倒三角形 ******* *****  ***   *   #!/bin/bash read -p "Input line number: "…

    Linux干货 2016-08-08
  • Linux软件包管理及相关命令

    rpm命令,yum命令

    2018-03-12
  • 初探VIM_第六周练习(02)

    引言—什么是Vim? 接触Linux这么久,想必对于一切皆文件的哲学思想已经不陌生了。因此,学习并掌握用一款Linux文本编辑器,对于玩转LInux来说,是很有必要的。 vi编辑器是Unix系统最初的编辑器,它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。 在GNU项目将vi编辑器移植到开源世界时,…

    Linux干货 2016-12-18
  • 梦想走向现实的地方

    曾经羡慕打字快的同学指尖能在键盘上优雅地跳舞,于是我有努力练习打字。 曾经羡慕同事能很神奇地把一个交换机的端口关闭,让那端口下面的人都不能上网,于是我努力学习交换机、路由。 现在我羡慕一个人能管很多服务器的人,于是我开始学习linux了。 努力成为一个也能管很多服务器的人,因为我也想别人叫我运维工程师

    Linux干货 2016-10-25
  • 【Linux基础】计算机及操作系统基础

    【Linux基础】计算机及操作系统基础 计算机的组成及其功能 计算机的组成 简单来说,计算机应由两部分组成:第一部分:硬件 冯诺依曼结构体系 当前计算机主要是基于冯诺依曼体系结构设计的,在该体系中,计算机硬件由5个部件组成。分别是:运算器、控制器、存储器、输入设备和输出设备。而现今运算器和控制器一般集成在一起,叫中央处理器(Central Processin…

    Linux干货 2018-03-04