shell 切割脚本

#!/bin/bash

#return error code
#0: success
#1: parameter error
#6: custom.log file is empty
#7: cut  file error
#8: up log file success

TAR_DIR_FILE_MAX=30
MAIN_LOG_FILE_MAX=1024
MAIN_LOG_NAME=‘custom.log‘
CUT_MAIN_LOG_FILE="custom_$(date +"%Y%m%d%H%M").log"

function usage()
{
   echo "Options:"
   echo "       -f: flg"
   echo "       -t: custom.log tar path"
   echo "       -l: custom.log path"
   echo "   -h: show help info"
}
function check_parameter()
{
   test "x${LOG_FLG}-${TAR_PATH}-${MAIN_LOG_PATH}" = "x--" && echo "Error: argment is empty" && usage && exit 1
   test "x$LOG_FLG" != "x1" && echo "Error: -f flg argment error" && usage && exit 1
   test "x$TAR_PATH" = "x" && echo "Error: -t custom.log tar path" && usage && exit 1
   test "x$MAIN_LOG_PATH" = "x" && echo "Error: -l custom.log path" && usage && exit 1
   [ -f "$MAIN_LOG_PATH" ] && echo "Error: -l must is dir" && usage && exit 1
   [ -f "$TAR_PATH" ] && echo "Error: -t must is dir" && usage && exit 1
}
function touch_main_file()
{
  touch "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}"
  chmod 777 "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}"
}
function rm_tar_file()
{
   SUM_TAR_FILE=`ls ${TAR_PATH}/ |wc -l`
   if [ "$SUM_TAR_FILE" -gt "$TAR_DIR_FILE_MAX" ]; then
      `find ${TAR_PATH}/ -mtime +2|xargs rm -f`
   fi
}

while getopts :f:t:l: OPTION
do
    case $OPTION in
       f)
       LOG_FLG=$OPTARG
        ;;
       t)
       TAR_PATH=$OPTARG
            ;;
       l)  MAIN_LOG_PATH=$OPTARG
        ;;
       h)
        usage
        exit 0
        ;;
       \?)
        echo "-$OPTARG: invalid option"
        usage
        exit 1
        ;;
    :)
        echo "-$OPTARG: miss option argment"
        usage
        exit 1
        ;;
    esac
done
#### 检查参数
check_parameter
#### 切割
[ ! -f "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}" ] && touch_main_file
[ ! -s "${MAIN_LOG_PATH}/${MAIN_LOG_NAME}" ] && echo "${MAIN_LOG_FILE}/${MAIN_LOG_NAME} file is empty" && exit 6
mv ${MAIN_LOG_PATH}/${MAIN_LOG_NAME}   ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
test "x$?" != "x0" && echo "cut ${MAIN_LOG_PATH}/${MAIN_LOG_NAME} file error" && exit 7
touch_main_file
#### 打包
tar cjfP  ${TAR_PATH}/${CUT_MAIN_LOG_FILE}.tar.bz2  ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
#### 上报
FILE_SIZE=`du ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|awk ‘{print $1}‘`
[ "$FILE_SIZE" -gt "$MAIN_LOG_FILE_MAX" ] && UNIQ_FILE=`cat ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|sort|uniq|head -50` || UNIQ_FILE=`cat ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}|sort|uniq`
#### 删除
rm -f ${MAIN_LOG_PATH}/${CUT_MAIN_LOG_FILE}
#### 删除tar目录下最旧的文件
rm_tar_file
echo -e "${FILE_SIZE}(k)\n${UNIQ_FILE}" && exit 8

======= php

<?php
class sslog {
  public function init(){
    while(true){
     sleep(60);
     $output = array();
     $cmd = "/script/sslog/sslog.sh -l /home/www/Logs -t /home/www/Logs/logtar -f 1 </dev/null 2>&1 ";
     exec($cmd, $output, $code);
     if($code==6){
       continue;
     }
     $this->callbackLog(array(
         ‘service_keyword‘ => ‘boss_system_alarm‘,
         ‘rule_keyword‘ => ‘boss_system_alarm‘,
         ‘title‘ => ‘boss system  error‘,
         ‘content‘ => implode(‘,‘, $output)
      ));
    }
  }
  private function callbackLog($logData){
      $postKey   = md5(date(‘Ymd‘) );
      $postUrl   = "http://api.com/tigger_subscribe";
      $postData  = json_encode(array_merge(array(
            ‘fctoken‘ => $postKey,
            ‘fcname‘ => ‘syslog_monitor‘,
        ),$logData));
       $res = $this->postCurlData($postUrl,$postData);
       if(is_null(json_decode($res))){
          echo ‘callback url error....‘;
       }else{
         $decodeRes = json_decode($res, true);
         if(isset($decodeRes[‘status‘]) && !empty($decodeRes[‘status‘])){
            echo "callback url--{$res}";
         }
       }
       return $res;
   }
   private function postCurlData($get_url, $postdata = ‘‘, $other_options = array()) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $get_url);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        if (!empty($other_options[‘userpwd‘])) {
          curl_setopt($curl, CURLOPT_USERPWD, $other_options[‘userpwd‘]);
        }
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($curl);
        if (curl_errno($curl)) {
            return false;
        }
        curl_close($curl);
        return $ret;
   }
}
$sslog = new sslog();
$sslog->init();

时间: 2024-07-30 13:34:13

shell 切割脚本的相关文章

tomcat catalina.out切割脚本

shell脚本catalina.out 切割脚本...每天23.30切割.删除七天之前的日志 这里3个tomcat实例,,, 脚本写的很简单:(1)拷贝日志文件(2)清空日志文件*只能清空如果删除tomcat不重启不会生成新的日志文件*(3)删除七天之前的备份文件 备份文件的名字为catalina.out_时间 #!/bin/bash #切割 #备份的时间 BAK_time=`date -d today +"%Y%m%d"` #log的目录 BAK_PATH=/data/tomcat/

shell编程脚本语法

学习了两个月的Linux,记住了很多命令,知道了脚本的作用,也被脚本杀死了大概一半的脑细胞,现在脚本还不能熟练运用,感觉亏了.心疼我的脑细胞,痛恨脚本,但不得不说,脚本是一个好东西啊,用起来真的方便,但是写起来真的烧脑袋呦!下面来总结一下这周学习的脚本语法,哇,语法虽然不多也不难,但是结合起来熟练运用还有一定的难度,何况现在的脚本才几行,以后要写几行,心里没点数吗!废话少说,开始 跳过最基础的命令行堆积的脚本,总结一下让脚本更简洁实用的语法 首先,条件选择if语句登场 if语句用法:常见的单分支

怎么在命令模式下使用adb / 进入adb shell(脚本)

1.打开winows菜单,输入cmd命令,点击确定,进入命令模式下. 2.输入命令 D:(这里输入的D表示你的sdk存放的盘下) 然后回车输入cd 3.然后选择你sdk路径,复制路径. 4.鼠标点击cmd,选择编辑,选择粘贴 将复制的路径粘贴到 命令行 回车. 5.然后输入命令adb start-service 打开adb. 出现如图所示,表示adb服务开启成功,就可以使用adb命令了. 6.使用adb  shell 命令.--- 进入adb shell(脚本) 原文:http://jingya

nginx日记切割脚本,mysql定期备份脚本

大部分的日记切割和备份机制的都是一样:下面是nginx的日记切割脚本 #!/bin/bash logpath = '/home/nginx/log' nglogs = '/opt/nginx/logs mkdir -p $logpath/$(date +%Y)/$(date +%m) mv  $nglogs/access.log  $logpath/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log mv  $nglogs/error.log  

Nginx日志切割脚本实践

因为nginx存放的日志文件逐渐增大,导致日后想察看某个时间的日志的时候,打开巨大文件所带来的性能代价和时间定位查找麻烦,因此需要对日志文件按照时间和频率进行切割.切割过程如下: 创建当前时间目录,比如年/月目录 然后将当前指定的日志,剪切到该创建好的目录下 重启nginx服务,重新生成0kb大小的新日志文件 通过计划任务,周期性执行以上切割日志,重新生成日志的操作就能达到既让日志文件保持一定大小而且又能按照指定的时间格式和目录进行存放.方面查询的便利和文件打开的快速. 切割脚本代码如下: 1

shell之脚本实例

一 检查用户是否是root权限的方式:#!/bin/bashROOT_UID=0 # Root has $UID 0.E_WRONG_USER=65 # Not root? E_NOSUCHUSER=70SUCCESS=0 if [ "$UID" -ne "$ROOT_UID" ]then echo echo "Only root can run this script." echo exit $E_WRONG_USERelse echo ech

nginx日志切割脚本

# 编写切割脚本 # vim /data0/scripts/cut_nginx_log.sh #!/bin/bash logs_path="/data0/log/nginx" YDATE=`date  +"%Y"` MDATE=`date  +"%m"` DDATE=`date -d"1 day ago" +"%d"` HDATE=`date  +"%H"` mkdir -p ${log

linux下的shell和脚本

1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/sh).Bourne Again Shell(/bin/bash).C Shell(/usr/bin/csh).K Shell(/usr/bin/ksh).Shell for Root(/sbin/sh),等等 第一个Unix shell是由肯·汤普逊,仿效Multic上的shell所实现出来,称为s

【Telnet】使用Telnet协议连接到远程Shell执行脚本

介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnblogs.com/ssslinppp/p/6244653.html 其他示例: http://commons.apache.org/proper/commons-net/examples/telnet/TelnetClientExample.java http://www.programcreek.com/ja