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

    定时任务

    1.定时任务的相关文件

    ​ 用户的定时任务文件

    ​ /var/spool/cron/用户名 # 普通用户定义定时任务的配置文件

    ​ 管理员的定时任务文件

    ​ /etc/crontab

    2.定时任务书写方式

    ​ 格式 :* * * * * 代表:分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0/7代表周日)

    ​ * 每

    ​ */n 间隔时间 # */5 * * * * 每5分钟

    ​ - 区间 #上午的5点到11点执行 cmd命令:00 5-11 * * * cmd

    ​ , 分隔 #上午的5点到11点 下午的15点执行cmd命令:00 5-11,15 * * * cmd

    1.设置管理员定时任务

    ​ 编辑文件:vim /etc/crontab

    ​ 设置定时任务:

    ​ 1)每分钟往/root/2.txt中追加内容”jia“ :* * * * * root echo jia >> /root/2.txt

    ​ 2)每5分钟往/root/2.txt中追加内容”jia“ :*/5 * * * * root echo jia >> /root/2.txt #/n每n分钟执行一次

    ​ 如何查看定时任务是否执行成功?:

    ​ [root@oldboyedu ~]# tailf /var/log/cron #只能查看执行,不能看成没成功

    ​ [root@oldboyedu ~]# cat /var/spool/mail/root(用户名)#可看到结果成没成功

    2.设置用户定时任务

    1.用户的定时任务 只识别的路径 /usr/bin 目录

    ​ 解决办法:

    ​ 1)使用全路径执行命令

    ​ * * * * * /usr/sbin/ntpdate ntp1.aliyun.com

    ​ 2) 定义PATH变量

    ​ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'

    ​ 或者 PATH=‘$PATH:想要添加的路径变量’

    ​ * * * * * ntpdate ntp1.aliyun.com

    2.使用命令编辑配置文件

    ​ crontab -e 编辑文件 #语法检查 书写是否正确

    ​ crontab -l 查看用户的定时任务

    ​ crontab -r 清除用户的定时任务 慎用

    3.案例:定时任务 每分钟执行一次 测试 OK 修改为 每天凌晨12点执行一次

    ​ 1) 使用awk取出系统的eth0网卡IP地址

    ​ [root@oldboyedu ~]# ifconfig eth0|awk 'NR==2{print $2}'

    ​ 把取出的变量赋值,以便调用:

    ​ [root@oldboyedu ~]# IP= ‘ifconfig eth0|awk 'NR==2{print $2}'

    ​ `` 或者是 $() 把反引号中的命令先解析 把结果留在原地 赋值给变量名称

    ​ 2)创建一个以IP地址命名的目录 /root/10.0.0.200

    ​ 调用变量创建目录: [root@oldboyedu ~]# mkdir /root/$IP

    ​ 3)打包 /etc/passwd 文件 以时间格式命名 2020-11-12_etc.tar.gz 放在10.0.0.200目录下

    ​ 把时间变量赋值:TIME=·date +%F-%H-%M-%S· 有反引号

    ​ 到相对路径打包:cd /etc

    ​ tar zcvf /root/$IP/${TIME}_etc.tar.gz passwd

    ​ 4) 解决办法:先把命令写入脚本 测试----》在定时任务执行脚本

    ​ 把步骤写入shell脚本 固定的目录 /server/scripts 创建目录:mkdir -p /server/scripts

    ​ 执行shell脚本几种方式:

    ​ (1)sh或bash 脚本名称 :sh是bash的软连接 子shell中运行

    ​ (2). 或者 source 将子shell中的命令 拿到父shell中执行

    ​ 全路径方式 默认shell脚本没有执行权限 必须给执行权限

    ​ ./1.sh 当前目录下 ;/root/1.sh 根目录下

    ​ 编辑脚本:vim 1.sh

    			###1. 获取IP地址 定义变量
    			IP=`ifconfig eth0|awk 'NR==2{print $2}'`
    			TIME=`date +%F-%H-%M-%S`
    			###2. 创建以IP命名的目录
    			mkdir /root/$IP
    			###3. 打包文件并放入目录 
    			cd /etc
    			tar zcf /root/$IP/${TIME}_etc.tar.gz passwd
    

    ​ 5)写入定时任务 crontab -e

    ​ 1.先设置为每分钟测试

    			[root@sc ~]# crontab -l
    

    ​ PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'

    ​ * * * * * sh /root/1.sh

    ​ 2. 修改正常的备份时间

    ​ 00 00 * * * sh /root/1.sh

    4.定时任务规范:

    ​ 1)定时任务规则之前加注释: 姓名,时间,定时任务的作用等

    ​ 2)使用脚本替代命令行定时任务

    ​ (1)先在命令行测试命令出错

    ​ (2) 写入脚本测试 使用-x 查看脚本的执行过程

    			[root@oldboyedu scripts]# sh -x 1.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 passwd
    

    ​ 3)定时任务中date命令%百分号

    ​ (1)默认crontab不识别% 特殊含义的字符 需要转义

    ​ (2)先写入脚本,再执行脚本

    ​ 4)运行脚本一定要用/bin/sh或sh

    ​ (1)如果定义了环境变量PATH 不需要加全路径/bin /usr/bin #PATH="echo $PATH"

    ​ (2)如果没有定义 建议全路径执行

    ​ 5)定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或文件中

    ​ (1)每执行一个定时任务 每次都会把执行结果发送到邮件系统中 /var/spool/mail/root

    ​ 前提是postfix开启状态

    ​ 关闭邮件服务: systemctl stop postfix

    ​ (2)公司中大量的服务器是关闭postfix服务 邮件无法接收到定时任务的结果. 憋着发布不出去 会产生大量小文件,大量的小文件会占用大量的inode 导致无法往磁盘中写入数据

    ​ 默认小文件的位置:/var/spool/postfix/maildrop/

    ​ 解决方法1: 执行结果 定向到黑洞或者定向到文件中

    ​ * * * * * echo hehe &>/dev/null

    ​ 解决方法2: 开启邮件系统 不建议

    ​ 解决方法3: 定时删除小文件

    ​ * * * * * rm -rf /var/spool/postfix/maildrop/* #时间自己定义

    ​ 6)避免不必要的程序及命令输出

    ​ 打包进入相对路径 再打包;tar zcvf 去掉 v,打包命令去掉显示过程

  • 相关阅读:
    Matplotlib使用笔记
    python之enumerate
    初识matlab
    动态规划的解题思路是如何形成的
    【JVM】体系结构及其细节
    位运算的题目小结
    【JUC】死锁的实现及其定位分析
    【JUC】如何理解线程池?第四种使用线程的方式
    【JUC】实现多线程的第三种方式Callable
    可怜的实验鼠和小猪问题
  • 原文地址:https://www.cnblogs.com/jia-shu/p/13965701.html
Copyright © 2011-2022 走看看