设为首页 收藏本站
查看: 806|回复: 0

shell 切割脚本

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-2 09:25:17 | 显示全部楼层 |阅读模式
#!/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();

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294608-1-1.html 上篇帖子: PoweShell介绍 下篇帖子: Linux下shell脚本编写:不同机器间免输密码拷贝 切割
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表