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

相关推荐

  • Google 开源技术protobuf

    1.  Protobuf简介        protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行…

    系统运维 2015-04-04
  • N25-第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。   以Bob和Alice安全通讯为例:     Bob<———>Alice    1. Bob要和Alice安全通信首先要取得对方的公钥,即对方的证书,并验证证书的合法性。验证过程和内容: &n…

    Linux干货 2017-03-20
  • 逻辑卷

    LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。       LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载…

    Linux干货 2016-09-01
  • httpd配置

    1、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式

    2、简述request报文请求方法和状态响应码

    3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

    Linux干货 2018-02-05
  • btrfs文件系统及管理

      什么是btrfs? Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),linux文件系统,具有写时复制COW(copy-on-write),改善ext3文件系统单文件大小限制,并加入其他特性,如可写快照,快照的快照,内建RAID,子卷(subvloume),专注于容错,修复和易于管理。单文件…

    系统运维 2016-05-13
  • 为什么中国的网页设计那么烂?

    Nick Johnson,一个有12年经验的Web设计师在它的blog里写下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,腾讯榜上有名。其中的观点相当的好,希望所有的中国人都读一下。我不全文翻译了,只是给大家看一些摘要。(保证不会像《环球时报》一样) —————————— 作者2005年的夏天来到中国,他…

    Linux干货 2016-07-11