zoukankan      html  css  js  c++  java
  • linux_定时任务

    什么是定时任务?

      linux系统自身定期执行的任务和工作:

        轮训系统日志、备份系统数据、清理缓存等

    var/log/messages        # 系统日志文件,
    
    ll /etc/|grep cron          #  查询定时任务配置文件
    
    cat /etc/logrotate.d/syslog
    
    cat /etc/logrotate.conf       # 控制日志配置

                  一般来讲,不需要管

      用户执行的任务工作,也就是运维管理员执行的任务和工作

    linux系统下定时软件种类

           定时软件有: at, crontab, anacron

                  at: 适合仅执行一次就结束的调度任务

                  crontab:可以周期性执行任务工作

    crontab命令

           -l     list          查看crontab文件内容

           -e    eidit        编辑crontab文件内容

           -r                   删除crontab文件内容,很少用

           -i                   删除crontab文件内容,会提示,很少用

           -u             指定使用的用户执行任务

    crontab -e         # 等价于 vi /var/spool/cron/root
    crontab -l          # 等价于cat /var/spool/cron/root
    
    # crontab {-l | -e} 实际上是在操作 /var/spool/cron/当前用户 这样的文件
    # 通过这两个命令编辑定时任务和查询设置好的定时任务

      配置定时任务有两个地方, /var/spool/cron/目录下 或 /etc/crontab 中配置,但最好不要在/etc/crontab中配置

      /etc/crontab 中有 7个字段

    cat /etc/crontab    # 查看定时任务相关字段

          

      分、时、日、月、周 、cmd

           0-59, 0-23, 01-31, 01-12, 0-7 (0和7表示星期天)

           cmd 执行的任务,包含2个部分,命令解释器绝对路径, 程序所在绝对路径

      问题: 因为定时任务执行完会给对应用户发邮件,但是邮件服务生产环境下默认不开,就有可能因此产生大量的小文件,大量占用磁盘的inode,从而产生让磁盘满但是通过df -h 还有剩余空间的现象

      方法: 定时任务后面添加 >/dev/null 2>&1 ,表示错误或者正确 输出都扔到垃圾箱

    crontab中特殊的字符

           *      表示任意时间都,“每”的意思

                  例子:

                  * 23 * * * cmd, 表示每月每周每日23:00都执行cmd任务

           -  减号表示分隔,如 17-19,表示每天 17 18 19 点 00 分执行任务

           ,   逗号,表示分隔时段的意思, 30 17,18,19 * * * cmd    每天 17 18 19 点半执行cmd任务

           /n    n表示数字,即每隔n单位时间, 如每分钟执行一次任务可以写成, */10 * * * * cmd,也可以写成 0-59/10 * * * * cmd

    30 3,12 * * * cmd      # 每天凌晨3点半和中午12点半执行任务
    
    30 6 * * * cmd        # 每隔6个小时的半点时刻执行任务
    
    30 21 * * * cmd             # 每天晚上21点半,执行任务
    
    30 8-18/2 * * * cmd       # 早晨8点到下午18点隔两小时的半点时刻执行任务
    
    45 4 1,10,22 * * cmd    # 每月1号,10号,22号的凌晨4点45分执行任务
    
    00 */1 * * * cmd          # 每天每隔1个小时整执行任务
    
    * 23,00-07/1 * * *       #每天23点 和早上0-7点之间每隔一个小时每分钟都执行这个任务,这个写法不规范
    
    00 11 * 4 1-3 cmd         # 4月每周周一到周三 上午11点整执行任务
    
    # 周和日尽量不要同时使用,运维首要原则结果可预测性,建议写 0做小于10的数
    

     

      依赖于 crond 服务

    chkconfig --list|grep 'crond'        # 查看对应服务运行级别信息
    # 结果 crond          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
    # 以上表示 2 3 4 5 级别开机都启动这个服务
    chkconfig --level 3 crond        # 让服务在 3 级别运行
    
    chkconfig crond on    # 默认2345 级别运行
    
    # chkconfig crond off    # 取消 2345 级别运行
    

      

    工作中如何调试定时任务?

      1. 增加执行任务频率

        时间间隔为1分钟或系统时间后5分钟

      2. 某些任务不能用于生产环境,没有调试机会

      3. 调整系统时间调试任务,保持5分钟(不能用于生产环境)

      4. 通过脚本日志输出调试定时任务

      5. 通过定时任务调试

      注意环境变量带来定时任务故障

    例如:

           标准输出多个, 多个标准输出

           路径没写全,命令写全路径或者通过export PATH 把环境变量写入其中

    代码、配置变更发布流程是什么?

           个人开发环境  > 办公测试环境 > IDC机房测试 > IDC正式环境(分组,灰度发布)

    假如脚本和配置都没问题,但是定时任务并没执行,那是什么原因?

    1. 脚本是否有 r x两个权限
    2. Java脚本时候,注意是否和系统环境变量冲突,变量重新定义
    3. 脚本路径是否是全路径,路径是否正确

    定时任务总结:

      1. 通过 crontab -e 来进行定时任务编辑,会检查语法错误,通过crontab -l 查看当前用户的定时任务

      2. crontab 命令更改 /var/spool/cron/用户 文件

      3. 定时任务执行时,会给当前用户发送邮件,如果当前用户没有启动邮件服务,将会产生大量小文件占有inode空间,需要在每个定时任何后面添加 >/dev/null 2>&1

      4. 定时任务的命令解释器和命令代码文件,需要给出绝对路径

      5. 任何调试,都不能在生产环境,调试时候注意文件是否有读和执行权限,注意Java脚本是否与环境变量冲突

      6. * 表示每, - 表示从什么到什么, /n 间隔单位时间, , 并列时间段

      7. 周 和 日 这两个不能同时设置,不然增加不可预测性

      8. 分 时 日 月 周, 除了周,时间从小到大

    相关定时任务  

      1. 在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到 /dev/null设备

    15 3 * * 06 /bin/bash /home/shell/collect.pl > /dev/null 2>&1

      2. crontab在11月份内,每天的早上6点到12点中,每隔两个小时执行一次 /usr/bin/httpd.sh,怎么实现

    00 6-12/2 * 11 * /bin/bash /usr/bin/httpd.sh > /dev/null 2>&1
    

      3. 每5分钟,通过 time1.aliyun.com 获得授时服务,更改系统时间

    */5 * * * * /bin/bash /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
    

      

  • 相关阅读:
    java---随机点名
    java实现窗体JFrame加载动态图片
    微信小程序--登陆页面
    java基础--随机数 猜数字游戏
    jQuery表单验证
    js获取Id,标签,类的几种选择器封装
    轮播图
    关于mysql安全
    PHP5.4开启zend opcache缓存
    ccs3中icon转换为字体的方法
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/7953842.html
Copyright © 2011-2022 走看看