zoukankan      html  css  js  c++  java
  • 备份定时任务脚本

    备份定时任务脚本

      顾名思义,就是备份定时任务上面的脚本的脚本,挺拗口的 = =

      linux放在crond定时任务的脚本一般如下形式:

    分 时 日 月 周 bash/sh 脚本名

      一个正规、好看的格式,在字段之间应该只有一个空格,所以本文并不探讨那种多空格的情况。以下这种不考虑!!!(当然优化的话,可以做~~不过何必呢,看着都难受,还不如手动调好格式)

       写这个脚本的时候有几个注意点:

      1、定时任务,不一定最后的字段是脚本,可能是些命令,诸如复制,目录路径之类的。为了防止这种情况,需要读取 /var/spool/cron/用户名 列表,脚本上用cronlist写入这个列表。

      2、执行脚本的用户要有读取  /var/spool/cron/ 的权限,要不就普通用户 sudo 提权的,要不就直接挂root执行

      3、拿到crontab计划任务列表最后一个字段之后,要判断两个情况:

      (1)这个脚本是否存在(线上还真的挂了个已删了脚本文件的定时任务)

      (2)防止拿到最后第7个字段是目录的情况,导致脚本报错,需要判断有没有脚本后缀。我工作环境一般就是 .sh 或者 .py,所以有这两个关键字就摘取下来了

      其他情况,不知道有没有考虑清楚了,如果有什么不对,欢迎读者指出 ^___^

      贴上脚本:

     1 #!/bin/bash
     2 
     3 ### 1、备份路径
     4 target_dir='/root/crontab_backup'
     5 [ ! -d ${target_dir} ] && mkdir -p ${target_dir}
     6 
     7 baktime=`date +%Y%m%d`
     8 Hostname=`echo $HOSTNAME`
     9 tmpfile=${target_dir}/tmpfile
    10 source='/var/spool/cron'
    11 
    12 
    13 ### 传到远程备份(这块还没写完....,待续)
    14 #echo 'user xxx xxx' >ftptemp.txt
    15 #echo ' ' >ftptemp2.txt
    16 #echo 'bin' >>ftptemp.txt
    17 
    18 
    19 ## 备份目录:以主机名作为目录名
    20 #echo "mkdir $Hostname-${baktime}" >> ftptemp.txt
    21 
    22 ### 统计多少个用户有计划任务(这个也没什么用的)
    23 cron_usernum='ls /var/spool/cron |wc -l'
    24 
    25 for user in `ls /var/spool/cron`; 
    26 do
    27         ## 如果不存在当前用户的备份目录,则创建
    28         bakuser=${target_dir}/${user}  
    29         [ ! -d ${bakuser} ] && mkdir -p ${bakuser}
    30 
    31         ## (1)获取当前用户的计划任务列表,防止仅是命令的情况
    32         bakuser_cronlist=${bakuser}/cronlist
    33         cat ${source}/$user > ${bakuser_cronlist}
    34 
    35         ## (2)获取当前用户的计划任务脚本
    36         cat ${source}/$user | grep -v ^$ | grep -v "^#" | awk '{print $7}' |  tr -s '
    ' | awk '{print $NF}' | uniq 
    37 | sort > ${tmpfile}
    38 
    39         ## 找到最后一列: 脚本路径+文件名
    40         ## 遍历,找到文件逐个复制到备份目录
    41 
    42         cat ${tmpfile} | while read line
    43         do
    44            f1=`echo $line`
    45            ## 判断最后一列,是脚本则备份
    46            keyword1=".sh"
    47            keyword2=".py"
    48            
    49            result1=$(echo $f1 | grep "${keyword1}")
    50            result2=$(echo $f1 | grep "${keyword2}")
    51 
    52            if [ "$result1" != "" -o  "$result2" != "" ]; 
    53            then
    54                cp $f1 ${bakuser}/
    55            fi
    56     done
    57 done
  • 相关阅读:
    汉字转拼音的一个类(C#)
    对象当前正在其他地方使用 异常
    关于IE无法打开站点XX已终止操作问题
    C语言有以下几种取整方法:
    做发型屋碰到的
    glTexImage2D()函数的使用注意点
    python爬取百度图片——翻页式网站爬取
    js 中文传值乱码记录
    Wp7 日志 工具
    基于 Android NDK 的学习之旅 Java 方法映射到C中的签名(附源码)
  • 原文地址:https://www.cnblogs.com/windysai/p/15521344.html
Copyright © 2011-2022 走看看