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

    1. 定时任务服务名称

    crond 
    默认开机自动运行 自动启动 默认有系统的定时任务
    

    2. 定时任务的相关文件

    两个
    
    用户的定时任务文件
    /var/spool/cron/用户名   # 普通用户定义定时任务的配置文件
    
    管理员的定时任务文件
    /etc/crontab 
    

    3. 定时任务书写方式

    格式  使用的/etc/crontab 管理员定时任务
    
    	* * * * * 
    	分 时 日 月 周
    	第一颗星: 表示分钟 0-59  0表示整点
    	第二颗星: 表示小时 0-23  0表示凌晨12点
    	第三颗星: 表示天   1-31
    	第四颗星: 表示月   1-12
    	第五课星: 星期几   0-6  0表示周日 7表示周日 
    	
          * 表示每分钟 
          */n
            */5 * * * * cmd
          - 区间
               上午的5点到11点执行 cmd命令
    	   00 5-11 * * * cmd
          ,分隔
                上午的5点到11点 下午的15点执行cmd命令
    	     00 5-11,15 * * * cmd
    
    案例:
    
    每天早上8点整来学校上车
          如何表示8点
          0 8 * * * root echo "sc"	 ##  00 08 * * * root echo "sc"
    
    调试定时任务
          * * * * *  每分钟执行1次
    		 
    如何查看定时任务是否执行成功
          俩文件:
          [root@oldboyedu ~]# tailf /var/log/cron   # 只是查看有没有运行 但里面的定时任务有没有成功 不显示
          [root@oldboyedu ~]# cat /var/spool/mail/root  # 开启了邮件服务  可以查看定时任务有没有成功 postfix 默认开启
    	
          每天晚上11点30分 回家开车
          30  23 * * * root echo "kc"
    

    4. 使用用户定时任务

    两种:
    
    直接修改配置文件
          vim /var/spool/cron/root
    			 
    使用命令编辑配置文件
          crontab -e  编辑文件 ---> vim /var/spool/cron/root    # 语法检查 书写是否正确
          crontab -e ===== vim /var/spool/cron/root(当前登录系统的用户名)
          crontab -l  查看用户的定时任务
          crontab -r 删除用户定时任务 危险!
    			 	
    每间隔5分钟进行一次时间同步命令  ? 在加定时任务的时候 在12点03的时候加上的 下次的执行时间是?
          */n
          */5 * * * * root ntpdate ntp1.aliyun.com  
    

    5. 定时任务规范

    5.1 定时任务规则之前加注释

    # Author oldboy date 11.10  备份 QQ110
    * * * * * sh /server/scripts/tar.sh
    

    5.2 使用脚本替代命令行定时任务

    1) 在命令行测试
    
    2) 写入脚本测试 使用-x 查看脚本的执行过程
          [root@oldboyedu scripts]# sh -x tar.sh 
          ++ ifconfig eth0
          ++ awk 'NR==2{print $2}'
          + IP=10.0.0.200
          ++ date +%F-%H-%M-%S
          + TIME=2020-11-12-11-26-18
          + mkdir -p /root/10.0.0.200
          + cd /etc
          + tar zcf /root/10.0.0.200/2020-11-12-11-26-18_etc.tar.gz hosts passwd
    
    -------------
          [root@oldboyedu ~]# cat /server/scripts/tar.sh 
          ###1. 获取IP地址 定义变量
          IP=`ifconfig eth0|awk 'NR==2{print $2}'`
          TIME=`date +%F-%H-%M-%S`
    
          ###2. 创建以IP命名的目录
          [ -d /root/$IP ] || mkdir  /root/$IP	# 判断目录是否存在 如果成功 执行&& 后面的内容 如果失败执行||
    
          ###3. 打包文件并放入目录 
          cd /etc
          tar zcf /root/$IP/${TIME}_etc.tar.gz hosts passwd
          
          ---------------
          [root@oldboyedu ~]# [ -d /etc ] && echo "目录存在" || echo "目录不存在"
          目录存在
          [root@oldboyedu ~]# [ -d /etccccc ] && echo "目录存在" || echo "目录不存在"
          目录不存在
    

    5.3 定时任务中date命令%百分号

    默认crontab不识别% 特殊含义的字符 需要转义
    * * * * * tar zcf /opt/`date +\%F`_etc.tar.gz /etc/hosts &>/tmp/error.log
    * * * * * date +\%F &>/tmp/test.log
    
    第二种方式 写入脚本 
    [root@oldboyedu scripts]# cat test.sh 
    tar zcf /opt/`date +%F`_etc.tar.gz /etc/hosts &>/tmp/error.log
    

    5.4 运行脚本一定要用/bin/sh或sh

    1.如果定义了环境变量PATH 不需要加/bin /usr/bin
    2.如果没有定义 建议全路径执行
    

    5.5 定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1

    每执行一个定时任务 每次都会把执行结果发送到邮件系统中 /var/spool/mail/root # 前提是postfix开启状态
    公司中大量的服务器是关闭postfix服务 邮件无法接收到定时任务的结果. 憋着发布出去 会产生大量小文件
    大量的小文件会占用大量的inode 导致无法往磁盘中写入数据
    
       解决方法1:
          执行结果 定向到黑洞或者定向到文件中
       解决方法2:
          开启邮件系统 不建议
       解决方法3:
          定时删除小文件
    			
       默认小文件的位置:
          /var/spool/postfix/maildrop/
       
       测试生成小文件
          systemctl stop postfix  # 关闭邮件服务
          定义多个定时任务 生成小文件
    

    5.6 避免不必要的程序及命令输出

    打包进入相对路径 /etc/hosts  cd /etc 
    tar zcvf 去掉 v
    

    5.7 打包压缩使用相对路径(切到目标目录的上一级打包目标)

    5.8 定时任务脚本中的程序文件 ,尽量用绝对路径

    前提是没有定义PATH变量
    

    5.9 系统与命令位置有关的环境变量问题

    PATH="echo $PATH:/usr/local/maven/bin"
    /usr/local/maven/bin:
    
  • 相关阅读:
    perl 判断网站内容是否变更
    鸿雁电器oa系统中决策支持模块效果
    爬虫1-15
    自动封杀脚本
    图表中如何实现动态变更分类轴与系列值
    错误代码: 1305 PROCEDURE world.insert_data does not exist
    错误代码: 1054 Unknown column 't.createUsrId' in 'group statement'
    错误代码: 1247 Reference 'startTime' not supported (forward reference in item list)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty
    echarts中地图提示"TypeError:i is undefined"
  • 原文地址:https://www.cnblogs.com/hsqKTm/p/13960452.html
Copyright © 2011-2022 走看看