计划任务和周期性任务

linux计划任务

    功能:指定未来的某以特定的时间点执行一次任务

    命令:at、bathc

    at命令:

        选项:

            -V:显示版本信息

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

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

            -c:+作业编号:查看指定的作业任务

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

                  at now + 3 minutes -f /testdir/qipan.sh 

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

        注意:作业执行的结果中的标准输出和错误以邮件通知给相关用户,例如echo命令执行结果不会再屏幕显示

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

            HH:MM [yyyy-mm-dd]

            noon(12),midnight(0),teatime(16),tomorrow,now+#{minutes,hours,days,OR weeks}

          例如: 04pm March 17

            04:00 2016-09-20

                17:20 tomorrow

                now + 5 minutes

                04pm + 3 days

        [email protected]  ~ # at 9:00 2016-10-10        
        at> wall Are you OK?
        at> <EOT>          ##########ctrl + d 退出
        job 6 at 2016-10-10 09:00
        [email protected]  ~ # at 11:00 <<EOF    
        > what?
        > where?
        > EOF              #####此处输入结束符EOF即可
        job 10 at 2016-09-10 11:00

        权限:普通用户也可以执行at计划任务权限,也可以把用户放到/etc/at.deny这个黑名单中,直接在名单中写用户名即可,在该名单的用户则在at计划任务时,提示没有权限,当然也有白名单/etc/at.allow(默认不存在,需要手动创建),当白名单存在时,则白名单的优先级高于黑名单,且只有添加到白名单的用户才具有at命令,即使你不在黑名单里,如果两个文件都不存在则只有root有at权限。

        注意:在使用该命令之前要确定atd服务是否启动,service atd status,也可通过chkconfig –list atq 查看特定运行级别下是否开机启动。

linux周期性任务

    周期性计划任务:cron

        相关的程序包:

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

        cronie-anacron:cronie的补充程序,用户监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务。

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

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

        centos 7 systemctl status crond

        centos 6 service crond status

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

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

            /etc/crontab

    系统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
    10 21 * * * centos /bin/echo "Howdy!"  晚上9点10分运行echo命令;
    
    应用举例:
            3 * * * *:每小时的第三分钟
            3 4 * * 5:每周五的4点三分
            5 6 7 * *:每月的7号6点5分
            7 8 9 10 *:每年的10月9号8点7分
            9 8 * * 3,7:每周三和周日
            * 8,20 * * 3,7 每周三周日的早八点晚八点的每分钟执行一次任务
            08,20 * * 3,7 每周三周日的早八点晚八点的每分钟执行一次任务
            09-18 * * 1-8 工作时间内的每小时
            */5 * * * * 每5分钟执行一次

        时间表示法:

            (1) 特定值;

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

            (2) *

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

            (3) 离散取值:

                #,#,#

            (4) 连续取值: –

                #-#

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

                /#: #即为步长   每。。。

                    0 */3 * * * centos /bin/echo "howdy!"  每3小时echo命令;

        时间格式:

             @reboot Run once after reboot.

             @yearly 0 0 1 1 *

             @annually 0 0 1 1 *

             @monthly 0 0 1 * *

             @weekly 0 0 * * 0

             @daily 0 0 * * *

             @hourly 0 * * * *

        计任务:

            通过run-parts命令每隔固定的时间执行目录中的脚本,因此如果我们有哪些脚本需要周期性执行的可放到指定的目录

            /etc/crontab

            /etc/cron.d/ 配置文件   

            /etc/cron.hourly/ 脚本    每隔一小时执行目录中的脚本

            /etc/cron.daily/ 脚本

            /etc/cron.weekly/ 脚本

            /etc/cron.monthly/脚本

        anacron系统:

            功能:当我们计划执行某一任务时,如果系统关机会导致计划任务不能执行,因此,可以通过配置/etc/anacrontab来进行开机后多长时间之内,执行计划任务。

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

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

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

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

                    • 字段4:要执行的任务

        [email protected]  /etc/cron.daily # cat /etc/anacrontab         
        # /etc/anacrontab: configuration file for anacron  
        SHELL=/bin/sh
        PATH=/sbin:/bin:/usr/sbin:/usr/bin
        MAILTO=root
        # the maximal random delay added to the base delay of the jobs
        RANDOM_DELAY=45 ###最大延迟时间45min
        # the jobs will be started during the following hours only
        START_HOURS_RANGE=3-22
        
        #period in days   delay in minutes   job-identifier   command
        1	5	cron.daily		nice run-parts /etc/cron.daily
        7	25	cron.weekly		nice run-parts /etc/cron.weekly
        @monthly 45	cron.monthly		nice run-parts /etc/cron.monthly

    

    用户cron任务:

        crontab命令定义:每个用户都有专业的cron任务文件;/var/spool/cron/USERNAME(crontab -e 后自动生成,里面存储计划任务的内容,且与系统计划任务的区别是不用写用户名)

        crontab命令:

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

                -l:列出所有任务

                -e:编辑任务

                -r:移除任务

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

                -u user:仅root可运行,指定用户

        控制用户执行计划任务:/etc/cron.{allow,deny}等同于前面提到at权限问题。

        日志:/var/log/cron

    注意:运行结果的标准输出和错误输出会以邮件通知给相关用户相关用户,导致大量垃圾邮件占用磁盘空间,所以可采取如下措施:

            1、command > /dev/null

            2、command &> /dev/null

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

        例如:如何实现秒级别运行任务?

            * * * * * for min in 0 1 2;do echo "hi";sleep 20;done 每隔20秒执行一次echo hi

            如何实现每7分钟运行一次任务?

            sleep命令:

                sleep #[suffix]

                    suffix:s,秒,默认

                        m,分,

                        h,小时

                        d,天   

                usleep:微妙   usleep 1000000:1s

             

         练习:

            1、每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“ etc-yyyy-mm-dd-HH.tar.xz”

0 4 * * * tar Jcf /backup/etc-`date +\%F-\%H`.tar.xz /etc/ &> /dev/null

            2、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“ messages-yyyymmdd”

* * * * 2,4,7 cp -a /var/log/messages /logs/messages-`date  +\%Y\%m\%d`

            3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

* */2 * * * grep "^[SM]" /proc/meminfo >> /tmp/meminfo.txt

            4、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

*/10 * * * * /root/bin/disk.sh
#!/bin/bash
DISK=`df|grep "^/dev/sd.*" | tr -s " "|cut -d" " -f5 | tr -d %|sort -n|tail -1`
[ $DISK -gt 80 ] && wall "disk will be full"

    

    

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

(0)
NarutoNaruto
上一篇 2016-09-12 20:34
下一篇 2016-09-12 20:44

相关推荐

  • Lnmp安装脚本

    1、源码编译安装LNMP架构环境; 此题略 此链接为安装nginx时,编译参数和各个模块和第三方模块的介绍,十分丰富,安装前可以参考学习 https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/ 2、编写一个脚本完成以下功能:    (1)、一键搭建…

    Linux干货 2016-12-05
  • Linux系统的磁盘管理

    linux磁盘及文件系统管理 磁盘分区及文件系统管理 RAID设备 LVM: 磁盘的动态编辑管理 CPU, memory(RAM), I/O I/O设备: Disks, Ethercard (网卡) Disks: 实现持久存数数据 接口类型: IDE(ata): 并口  理论速度: 133MB/s SCSI: 并口 640MB/s SATA: 串口…

    Linux干货 2016-08-29
  • 第二周练习题

    创建/tmp目录下的:a_c,a_d,b_c,b_d; ~]# mkdir -pv /tmp/{a_{c,d},b_{c,d}} 创建如下目录: ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,…

    Linux干货 2016-11-01
  • Linux防火墙之基本原理

    本系列文章主要讲述Linux防火墙的基本原理和基础使用方法: 1.什么是防火墙: 当我们把计算机连入互联网与其他计算机进行通信时,这无疑也将自己的信息暴露了,那就意味着可能会有一些心怀不轨的人会利用这些信息来攻击自己的主机,尤其是作为一台服务器向互联网用户提供服务时,就迫切需要一种隔离和保护机制,来隔离外部网络,达到保护自我的目的。而这种隔离机制就叫做防火墙…

    Linux干货 2016-12-27
  • sed

    复制/etc/rc.d/rc.sysinit文件到/tmp目录中,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首家#; 2.复制/boot/grub/grub.conf至/tmp中,删除/tmp/grub.conf文件中的行首的空白字符 3.删除/tmp/rc.sysinit文件中的以#开头,且后面跟了一个至少一个空白字符的行行的#…

    Linux干货 2016-12-04
  • 双主模型的Nginx高可用负载均衡集群

    实验目的:使用keepalived实现Nginx的双主高可用负载均衡集群 实验环境:两台Nginx proxy(双主Nginx,各需要两块网卡,eth0连接内网,eth1连接外网)、两台web server(请求的负载均衡)、一台client用于验证结果。 注意:为了不影响实验结果,在实验开始前先关闭iptables和selinux 操作步骤: 一、配置IP…

    2017-05-13