zoukankan      html  css  js  c++  java
  • 一个可自动备份及清理系统日志的Shell脚本

    由于是个人电脑,每天都要不定时的开关机~所以,就不使用cron了~
    这个脚本默认在每个月的最后一天或者/var/log/目录大小超过100MB时执行备份及清理日志~
    (可根据自己的实际情况放在~/.bashrc或~/.bash_profile文件中执行,也可以放在开关机服务中运行,但由于此时的$HOME为空,所以日志会备份到/BackupLog/目录下)
    补充一点:由于此脚本要对/var/log/目录下的所有目录及文件进行读写操作,所以要正常运行此脚本需要root权限。非root用户可以使用sudo。


    #!/bin/sh
    function backup_log() {
    printf "/nBackuping System Log ... ..."
    Year=`date +%Y`
    Month=`date +%m`
    mkdir -p $HOME/BackupLog/$Year/$Month
    DEST=$HOME/BackupLog/$Year/$Month/`date +%Y%m%d_%H%M%S`.tar.gz
    tar zcf $DEST /var/log/ 2> /dev/null
    }

    function check_dir() {
    dir=`ls -l $1 | grep "^d" | grep -v 'lost+found$' | gawk '{print $NF}' | sed -e :x -e 'N;s//n/ /g;tx'`

    for DIR in $dir
    do
    clear "$1$DIR/"
    check_dir "$1$DIR/"
    done
    }

    function clear() {
    old=`ls -l $1 |grep '/.old$' | gawk '{print $NF}'`
    if [ ! -z "$old" ] ; then
    rm -f $1*.old
    fi
    link=(`ls -l $1 | grep "^-" | gawk '{print $NF}' | sed -e :a -e 'N;s//n/ /;ta'`)
    for log in ${link[*]}
    do
    sed 's/.*//' $1$log > $1$log
    done
    }

    function clean_log() {
    printf "/nCleaning System Log ... .../n"
    clear $1
    check_dir $1
    }

    tomorrow=`date +%e -d tomorrow`
    space=`du -s /var/log/ | gawk '{print $1}'`
    if (( $tomorrow == 1 && $space > 5120 )) || [ $space -gt 102400 ] ; then
    amount=`echo $space | gawk '{printf "%.2f",$1/1024}'`
    printf ""The /var/log/ directory uses $amount MB disk space./nDo you want to archive the system log? [y/n] "
    read -n 1 input
    case $input in
    y | Y)
    backup_log
    ;;
    esac
    clean_log "/var/log/"
    fi

  • 相关阅读:
    RPC简介
    RabbitMQ从入门到精通
    flask 源码解析:响应
    flask 源码解析:请求
    flask 源码解析:上下文
    flask 源码解析:应用启动流程
    flask 源码解析:路由
    flask源码分析—简介
    11-Docker网络扩展
    10-Docker之Docker-Compose
  • 原文地址:https://www.cnblogs.com/axon/p/13707858.html
Copyright © 2011-2022 走看看