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

相关推荐

  • bash的基本特性之globbing,IO重定向及管道

    bash的基本特性之globbing,IO重定向及管道 giobbing:文件名通配 在bash的操作环境中有一个分厂有用的功能那就是gilobbing:文件名通配,这样我们在处理数据的时候就更方便了。下面我们来罗列一些常用的通配符。(注:globbing是做整体的文件名匹配而非部分) 匹配模式:元字符 *:表示匹配任意长度的任意字符  &nbsp…

    Linux干货 2016-12-19
  • 网络管理总结

      在学习Linux的快两个月时间的这个阶段,我们学习到了网络的相关知识,哇,原来我们上网是需要这么多步骤的,玩了这么久的电脑,打开过无数网站还只是停留在以为打开网站只需要点点鼠标的层面,惭愧惭愧。学习了一周,终于了解了一些网络的基层结构和一些网络协议,下面是对这一周所学知识的一些总结,加强记忆和理解。还停留在以为打开一个网站只是动动鼠标…

    2017-09-02
  • 用户组和权限管理的相关命令

    1,useradd  新建用户 useradd -u uid username 创建用户时指定uid(如不指定则Centos:500-60000, Centos7: 1000-60000) -o -u uid username  创建用户时指定uid(可以与已存在用户的uid相同) -g groupname username 创…

    2017-07-25
  • ☞卸载kernel玩一玩

    卸载kernel玩一玩 废话不多说,下面开始卸载内核这一惊险之旅,特别提醒在开始之前做好虚拟机的快照,也许会造成系统无法启动,也许会出现各种错误,也许会笑着删数据库跑路,也许会从入门到放弃,,请系好安全带。  练习 冒泡排序法 #!/bin/bash##Author:jasonmc#Date:2016-08-24#Description:buble…

    Linux干货 2016-08-26
  • Linux基础之部分命令使用实例一

    1、 Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 常用有:cp、mv、rm  cp [OPTION] SOURCE DEST //复制    option:      -i:交换式,用来提醒用户是否覆盖,当将源文件复制并粘贴到目的路径时,如果目的路径…

    Linux干货 2016-11-08
  • 文件系统权限管理

    文件系统权限管理 文件及目录权限 文件系统上的权限是针对访问者的 访问者:     owner:属主,u     group:属组,g     other:其他,o 针对每个访问者有三种权限 r:readable w:writeable x…

    Linux干货 2016-11-05