免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 645 | 回复: 3

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

论坛徽章:
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
发表于 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
发表于 2018-10-30 15:21 |显示全部楼层
问:去哪学linux版的powershell?
答:
QQ群号=183173532
名称=powershell交流群
公司:可以收取少许费用,群内远程帮你公司代培训员工。
个人:免费。

我看楼主骨骼精奇,想把维护脚本界和平的大任交托给你。
powershell是脚本界屠龙刀,屠龙刀要不?想学不?可以在ide中单步、断点哦。
只要你能把你的这个脚本,改写成ps版我就教你。如何?

第一招是这样,你来看:
if ( (id -u) -ne 0 )
{
echo "Please use root run this script"
exit 10
}

if ( -not $args )
{
echo "usage:`basename $0` number"
exit 10
}

论坛徽章:
0
发表于 2018-11-01 10:27 |显示全部楼层
回复 2# vagrant_1220

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP