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 08:47
下一篇 2016-09-09 10:25

相关推荐

  • VMware虚拟机三种连网原理简介

    一、前言         虚拟机(Virtual Machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作系统软件。虚拟机根据它们运用和与直接机器的相关性分为两大类。系统虚拟机和程序虚拟机,系…

    Linux干货 2015-08-03
  • 第二周作业

    一、Linux文件管理类命令     1、文件的复制、移动和删除     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15    A、cp  文件的复制        &nbsp…

    Linux干货 2016-12-13
  • Corosync+Pacemaker+DRBD实现高可用 Mariadb

    一、DRBD简介 DRBD全称Distributed Replicated Block (分布式的复制块设备),开源项目。它是一款基于块设备的文件复制解决方案,速度比文件级别的软件如NFS,samba快很多,而且不会出现单点故障,是很多中小企业的共享存储首选解决方案。 二、DRBD的工作模式从上图中我们可以清楚的看到DRBD是工作在内核中,将协议建立在buf…

    2017-11-05
  • N25第七周RAID LV 概述及示例,swap创建,read 特殊用法以及bash脚本示例

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; mke2fs -t ext4 -b 2048 …

    Linux干货 2017-01-04
  • Code Review中的几个提示

    Code Review应该是软件工程最最有价值的一个活动,之前,本站发表过《简单实用的Code Review工具》,那些工具主要是用来帮助更有效地进行这个活动,这里的这篇文章,我们主要想和大家分享一下Code Review代码审查的一些心得。 首先,我们先来看看Code Reivew的用处: Code reviews 中,可以通过大家的建议增进代码的质量。 …

    Linux干货 2015-04-03
  • 第一周作业

    1. 描述计算机组成及其功能 说到计算机组成,就必须提及计算机之父冯洛伊曼先生。是他早年最先提出了计算机体系结构的设想,并沿用至今。 计算机由五大基本组件组成: 运算器 进行算术运算和逻辑运算的主要部件; 控制器 控制器从存储器中逐条取出指令、分析指令,然后根据指令要求产生一系列命令,控制计算机各部件; 存储器 分为内存和外存,…

    Linux干货 2016-12-02