• 计划任务


    为什么要设置计划任务

      我们在系统的管理中,很多时候不是及时的去操作,比如对某一网站数据的备份,备份的过程需要占用大量的系统资源,凌晨三四点的时候系统访问用户最少,系统最空闲。但我们的系统的系统管理员总不能老那个时间爬起来操作吧。

    计划任务的命令

      计划命令分一次性计划周期性计划
    at    安排作业在某一时刻执行一次
    batch 安排作业在系统负载不重时执行一次
    cron 安排周期性运行的作业

    一次性计划at和batch

    at命令

    删除at计划任务
     at -d

    查看at计划任务
    ls /var/spool/at/

    batch命令

    作用:
      安排一个或多个命令在系统负载较轻进运行一次(一般情况下负载较轻指平均负载降到0.8以下)

    使用方法同at

    周期性计划命令crontab

      作用:用于生成cron进程所需要的crontab文件

    crontab命令:

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

    -l: 列出所有任务;

    -e: 编辑任务;

    -r: 移除所有任务;

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

    -u user: 仅root可运行,指定用户管理cron任务

    crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

    注意:运行结果的标准输出和错误以邮件通知给相关用户

     centos7 # systemctl status atd crond开机时需启动服务

                     systemctl enable atd crond  重启还是启动的

    centos6 # service crond atd start开机时需启动服务

                     chkconfig --list atd crond开机启动确保为on状态

    /var/spool/cron/ :存放用户的任务计划

    /etc/cron.{allow,deny}  :控制用户创建任务计划黑白名单,同at原理一样

    /var/log/cron :日志文件

    /etc/cron.hourly/ :每小时执行的脚本

    /etc/cron.daily/ :每天执行的脚本

    /etc/cron.weekly/ :每周执行的脚本

    /etc/cron.monthly/ :每个月执行脚本

    复制代码
    [root@rhel6 ~]# cat /etc/crontab #配置文件
    SHELL=/bin/bash #执行任务命令的shell类型
    PATH=/sbin:/bin:/usr/sbin:/usr/bin  #执行任务的环境变量
    MAILTO=root  #执行任务的用户
    HOME=/  #家目录
    
    # For details see man 4 crontabs
    
    # 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
    复制代码

    时间通配表示:

    • *:对应时间的所有有效取值,每
    • ,:离散时间点,和
    • -:连续时间点,到
    • /:对应取值范围内多久一次,每隔
    复制代码
    @reboot 		  :系统启动后执行
    @yearly		0 0 1 1 * :每年的1月1号00:00执行一次任务
    @annually	0 0 1 1 * :每年的1月1号00:00执行一次任务
    @monthly	0 0 1 * * :每月的1号00:00执行一次任务
    @weekly		0 0 * * 0 :每周日的00:00执行一次任务
    @daily		0 0 * * * :每天的00:00执行一次任务
    @hourly		0 * * * * :每小时执行一次任务
    复制代码

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

    思考:如何在秒级别运行任务?

    实现每秒执行

      由于crontab最小时间单位为分钟,所以我们需要借用sleep命令使其“睡一会”,来实现秒级别,及不能整除时间单位的计划任务。

    sleep命令:

     sleep NUMBER [SUFFIX]...

       SUFFIX:

        s: 秒, 默认

        m: 分

        h: 小时

        d: 天

    如:每20秒执行一次

    * * * * *  for min in 0 1 2; do echo "hi"; sleep 20 ; 
    done实现每秒执行
    #vim test.sh
    #!/bin/bash
    while true ;do
    sleep 1
    echo "hello"
    done
    #crontab –e
    * * * * *   /root/test.sh >> /data/mail
    #cat /data/mail
    练习
    
    ①每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为“/etc-yyyy-mm-dd-hh.tar.gz”
    
    # crontab -e
    0 */12 * * * tar -zcf  /etc-`date +\%F-\%H`.tar.gz  /backups
     
    
    ②每周2,4,7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;
    
    # crontab -e 
     * * * * 2,4,7  cp -r /var/log/secure  /logs/secre-`date +\%F`
     
    
    ③每两个小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;
    
    # crontab -e
      0 */2 * * * grep "^[SM].*"/proc/meminfo >> /tmp/meminfo.txt
     
    
    ④四月的第一个星期日早晨1点59分运行a.sh
    
    # crontab -e
     59 1 1-7 4 * test `date +\%w` -eq 0 && bash a.sh
    ⑤工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报
    
    # vim /testdir/disk.sh
    #!/bin/bash
    a=`df | grep  "^/dev/sd" | tr -s ‘ ‘ ‘%‘| cut -d% -f5 | sort -n  | tail -1`
    if [ $a -gt 80 ];then
    wall "The disk will be full"
    fi
    # chmod +x disk.sh
    # crontab -e 
    */10 * * * 1-5 /testdir/disk.sh
  • 相关阅读:
    微服务,你得知道这些!(核心组件底层原理Eureka,Feign,Ribbon,Hystrix,Zuul)
    SpringBoot中使用线程池
    字符编码的来源以及历史
    linux设置定时任务以及使用的方法
    第一次搭建成功nginx的配置文件留作纪念(nginx.conf文件)
    接口幂等性适用场景及设计方法
    linux下安装nginx与配置
    怎么将多个项目放进一个工作集中!!!
    原生Ajax请求步骤
    JSP与Servlet的区别、联系
  • 原文地址:https://www.cnblogs.com/yaun1498078591/p/8996170.html
Copyright © 2020-2023  润新知