页首Html代码

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:
posted @ 2020-11-12 15:40  哈士骑KT猫  阅读(211)  评论(0编辑  收藏  举报