免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1620 | 回复: 3
打印 上一主题 下一主题

[系统管理] shell 备份日志 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-10-30 10:57 |只看该作者 |倒序浏览
#!/bin/bash
#++++++++++++++++++++++++++++++++++++++++++++++
#Description:clear and backup logs。
#Author:chappy
#Date:2018-10-27
#Version:v1.0
#History:begin
#++++++++++++++++++++++++++++++++++++++++++++++

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

set -o nounset
#set -o errexit

backup_logs_from="/var/log"
backup_logs_to="/opt/log"
#当月之前的几个月
month_ago=$1
var=$(echo $1|bc 2>/dev/null)
#script initialization parament
function usage(){
        [ "$(id -u)" -ne 0 ] && { echo "Please use root run this script";exit 10; }
        [ -z "$1" ] && { echo "usage:`basename $0` number";exit 10; }
        [ "$var" !=  "$1" ] && { echo "usage:`basename $0` number";exit 10; }
}
# script main program
function backup_del_log(){
        local fileList
        local s
        s=$1
        fileList=$(ls -l ${backup_logs_from}|grep "^-"|awk '{print $9}')
        while [ "$s" -gt 0 ];do
                for i in $fileList;do
                                #从S月开始备份到上月止
                        if [ "$(date "+%Y%m" -r ${backup_logs_from}/$i)" -eq  $(date  -d "-$s month" +%Y%m) ];then
                                [ ! -d ${backup_logs_to}/$(date  -d "-$s month" +%Y%m) ] && $(mkdir -p ${backup_logs_to}/$(date  -d "-$s month" +%Y%m).bak)
                                $(cp ${backup_logs_from}/$i ${backup_logs_to}/$(date  -d "-$s month" +%Y%m).bak/$i)
                                $(rm -rf ${backup_logs_from}/$i)
                                echo "delete ${backup_logs_from}/$i" >>${backup_logs_to}/log
                        fi
                done
                let s--
        done

}
#tar packet backup files and delete files
function tarPacket(){
        local y
        y=$1
        while [ "$y" -gt 0 ];do
                `cd ${backup_logs_to}`
                if [ "$?" -eq 0  ];then
                [ -d ${backup_logs_to}/$(date -d "-$y month" +%Y%m).bak ] && `tar -czf ${backup_logs_to}/$(date -d "-$y month" +%Y%m).bak.tar.gz ${backup_logs_to}/$(date -d "-$y month" +%Y%m).bak 2>/dev/null` && rm -rf ${backup_logs_to}/$(date -d "-$y month" +%Y%m).bak
                fi
        let y--
        done
}
#script body
usage $month_ago
backup_del_log $month_ago
tarPacket $month_ago
echo "backup finished Bye!"


请问大哥们,为什么打开set -o errexit 脚本就运行不完就退出。我没有找出问题。

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-17 06:20:00
2 [报告]
发表于 2018-10-30 13:44 |只看该作者
set -o errexit等价于 set -e "Exit immediately if a simple command exits with a non-zero status."接下来的代码出现任何非零返回,整个脚本都退出。有时脚本一些子命令返回可能是非零的,但不影响整个脚本,例如测试一个文件存在与否,不存在就创建,如果设置了 set -o errexit,那就整个脚本就都退出了。如果不设置,整个脚本是正常的。

论坛徽章:
0
3 [报告]
发表于 2018-10-30 15:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2018-11-01 10:27 |只看该作者
回复 2# vagrant_1220

谢谢!非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP