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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code