Linux的常用的计划任务(一次任务与周期性任务) at & cron

  在Linux日常维护工作中,维护员不可能每时每刻都守在服务前前,但如果遇到例行的操作要进行怎么办?设定计划任务!

   

Linux任务计划、周期性任务执行

    • 未来的某时间点执行一次任务:

        at    (一条命令只能执行一次一个时间点)

        /var/spool/at   at任务列表,命令执行完就会删除对应的文件

        batch:系统自行选择空闲时间去执行此处指定的任务

    • 周期性运行某任务:

        cron

  

  at任务

     at命令: at [option] TIME

     常用选项:

            -V 显示版本信息:

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

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

            -c: 查看具体作业任务

          -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

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

                可以重定向,也可以多行重定向

                at TIME < COMMAND

                at TIME << eof

                COMMAND

    blob.pngblob.png

    

    由于没有标准输出,所有邮件内容为空,只是用户强制要求发邮件

     注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

    标准输出不会直接显示,会以邮件的方式放到邮箱中,在实际生产环境中避免有标准输出的语句,有的话重定向至/dev/null    这样可以避免大量的垃圾邮件,减少磁盘空间的浪费

     TIME:定义出什么时候进行 at 这项任务的时间

    HH:MM [YYYY-mm-dd]

    noon, midnight, teatime( 4pm)

    tomorrow

    now+#{minutes,hours,days, OR weeks}

    at时间格式

     HH:MM 02:00

    在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务

     HH:MM YYYY-MM-DD 04:00 2016-09-20

    规定在某年某月的某一天的特殊时刻进行该项任务

     HH:MM[am|pm] [Month] [Date]

    04pm March 17

    17:20 tomorrow

     HH:MM[am|pm] + number [minutes|hours|days|weeks]

    在某个时间点再加几个时间后才进行该项任务

    now + 5 minutes

    04pm + 3 days

     执行方式:

    1)交互式

    2)输入重定向  <  (也可以多行重定向 << EOF)

    3) at –f 文件

     依赖与atd服务,需要启动才能实现at任务

     at队列存放在/var/spool/at目录中

     通过/etc/at.{allow,deny}控制用户是否能执行at任务(白名单优先)

    先寻找/etc/at.allow 文件,文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在at.deny 当中)

    如果/etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者则可使用 at 命令。如果两个文件都不存在,只有 root 可以使用 at 这个命令。(相当于一个空的/etc/at.allow文件)



  周期性任务计划cron

        周期性任务计划: cron

        相关的程序包:

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

        cronie-anacron(一般用于移动端,对于服务器用处不大): cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

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

        blob.png

        /usr/lib/systemd/system/crond.service    有这个路径一般为服务进程,有用该服务,必须要开启(centos7)

        blob.png

        /etc/rc.d/init.d/crond   (centos6)

         确保crond守护处于运行状态:

                CentOS 7:

                    systemctl status crond

                CentOS 6:

                    service crond status

     计划周期性执行的任务提交给crond,到指定时间会自动运行

        系统cron任务:系统维护作业

        /etc/crontab

        用户cron任务:

        crontab命令

         日志: /var/log/cron

         系统cron任务:/etc/crontab

         注释行以 # 开头

         详情参见 man 5 crontab

        # 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分运行echo命令;

        10 21 * * * centos /bin/echo "Howdy!"

       

时间表示法:

         (1) 特定值;

        给定时间点有效取值范围内的值

         (2) *

        给定时间点上有效取值范围内的所有值表示“每…”

         (3) 离散取值:

        #,#,#

         (4) 连续取值: –

        #-#

         (5) 在指定时间范围上,定义步长:

        /#   :    #即为步长

         例如:每3小时echo命令;

        0 */3 * * * centos /bin/echo "howdy!"

        Linux的常用的计划任务(一次任务与周期性任务)  at  &  cron

        每个月的1 10 20号或者星期6星期天的2 4点的每隔10分钟执行/bin/f1.sh   用wang用户身份

        Linux的常用的计划任务(一次任务与周期性任务)  at  &  cron

        如果想要与关系,就在脚本中判断日期

         @reboot Run once after reboot.

        重启后执行

         @yearly 0 0 1 1 *

        每年1月1号执行

         @annually 0 0 1 1 *

        每年1月1号执行(同上)

         @monthly 0 0 1 * *

         @weekly 0 0 * * 0

         @daily 0 0 * * *

         @hourly 0 * * * *

        计划任务

        • 系统的计划任务:

        /etc/crontab

        /etc/cron.d/ 配置文件

        有优先级,首字符

        /etc/cron.hourly/ 脚本

        /etc/cron.daily/ 脚本

        /etc/cron.weekly/ 脚本

        /etc/cron.monthly/脚本

        anacron系统

         运行计算机关机时cron不运行的任务, CentOS6.0以后版本取消anacron服务,由crond服务管理。

         假设计算机没有一直开机

         对笔记本电脑、台式机、工作站及其它不一直开机的系统

        很重要

         对偶尔要关机的服务器很有用

         配置文件: /etc/anacrontab,负责执行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务。 /etc/cron.hourly/由/cron.d/0hourly执行

        • 字段1:如果在这些日子里没有运行这些任务……

        • 字段2:在重新引导后等待这么多分钟后运行它

        • 字段3:任务识别器,在日志文件中标识

        • 字段4:要执行的任务

        • 当执行任务时,更新/var/spool/anacron/文件时间戳

        管理临时文件

         rhel6.0使用/etc/cron.daily/tmpwatch定时清除临时文件。

         rhel7.0使用systemd-tmpfiles-setup服务实现

         配置文件:

         /etc/tmpfiles.d/*.conf

         /run/tmpfiles.d/*.conf

         /usr/lib/tmpfiles/*.conf

         /usr/lib/tmpfiles.d/tmp.conf

         d /tmp 1777 root root 10d

         d /var/tmp 1777 root root 30d

         命令:

         systemd-tmpfiles –clean|remove|create configfile

        计划任务

         用户cron:(并非系统的)

         crontab命令定义,每个用户都有专用的cron任务文件:

        /var/spool/cron/USERNAME

         crontab命令:

        crontab [-u user] [-l | -r | -e] [-i]

        -l: 列出所有任务;

        -e: 编辑任务;

        -r: 移除所有任务;

        -i:同-r一同使用,以交互式模式移除指定任务

        -u user: 仅root可运行,指定用户管理cron任务

         控制用户执行计划任务:

        /etc/cron.{allow,deny}

        at和crontab

         一次性作业使用 at

         重复性作业使用crontab

        Create at time crontab -e   (编辑或创建)

        List at -l crontab -l     (查看)

        Details at -c jobnum N/A               (查看具体作业任务)

        Remove at -d jobnum crontab -r      (删除)

        Edit N/A crontab -e (编辑)

         没有被重定向的输出会被邮寄给用户

        (尽量减少有重定向输出的命令,用/dev/null)

         根用户能够修改其它用户的作业

        与at命令不同,at命令要属主与文件名想对应才能执行

         注意:运行结果的标准输出和错误以邮件通知给相关用户

        (1) COMMAND > /dev/null

        (2) COMMAND &> /dev/null

         对于cron任务来讲, %有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义

        计划任务

         思考:

         (1) 如何在秒级别运行任务?

        * * * * * for min in 0 1 2; do echo "hi"; sleep 20;

        done #for循环

         (2) 如何实现每7分钟运行一次任务?

        sleep 7m

         sleep命令:

        sleep NUMBER[SUFFIX]…

            SUFFIX:

                s: 秒, 默认

                m: 分

                h: 小时

                d: 天

        

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

(3)
hunterhunter
上一篇 2016-09-09
下一篇 2016-09-09

相关推荐

  • 马哥教育网络班19期+第十周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) CentOS主机按以下顺序启动 (1)POST     加电自检         (2)BIOS    &nbsp…

    Linux干货 2016-07-07
  • 磁盘管理及文件系统

    磁盘及文件系统管理初步与进阶(重点内容) 磁盘分区及文件系统 linux系统管理 磁盘分区及文件系统管理:分区工具 linux磁盘及文件系统管理 整个操作系统的硬件组成部分,最底层是硬件设备,计算能力得以运行的最根本的基础。 计算机的五大基本部件:cpu,运算器,控制器被整合到一起,由一个硬件部件来提供。 存储器(主存rom可编址的存储单元)。主板上有cpu…

    Linux干货 2016-08-30
  • Btrfs文件系统的管理

    BTRFS文件系统 核心特性 支持将多个底层物理设备组合成同一个设备使用,即多物理卷支持。btrfs可由多个底层物理卷组成:支持RAID,以连击“添加”、“移除”、“修改” 写时复制,在修改文件时,先将文件复制一份,然后在新文件上进行修改,最后将文件名的指针指向新文件,所以原文件还是存在的。 数据及元数据校验码:checksum 子卷:在一个卷上创建子卷,每…

    Linux干货 2016-07-16
  • 每日一练 —8.4 文本处理工具,正则表达式

    练习 1 、找出ifconfig 命令结果中本机的所有IPv4 地址 2 、查出分区空间使用率的最大百分比值 3 、查出用户UID 最大值的用户名、UID 及shell 类型 4 、查出/tmp 的权限,以数字方式显示 5 、统计当前连接本机的每个远程主机IP 的连接数,并按从大到小排序   6,显示/proc/meminfo文件中以大写或小写s开…

    Linux干货 2016-08-15
  • 第十二周作业

      1、描述一次完整的http请求处理过程 简介 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同样有标准的格式。无论是什么客户端或者是什么服务端,大家只要按照HTTP的协议标准…

    2017-11-12
  • N22-妙手-第九周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;: #!/bin/bash # declare -i numberOfLoginUser=0 declare -i numberOfUnloginUs…

    Linux干货 2016-10-19