关于后台使用jar部署日志收集与分割处理

一、场景

当后台使用springboot方式开发,然后打包成jar包,使用java -jar 命令部署时,需要保留日志信息,并且随着时间的增长日志不能过大,需要进行分割处理,

当然日志总量也有限制,需要定期清除。

 

二、解决方法

在脚本中使用命令行在后台运行jar, 然后将输出重定向到文件中。使用定时任务,每天在固定时间进行日志转移分割,并且检测清除超过时间范围的日志文件。

 

启动jar

#!/bin/bash

#jar名称

JAR_NAME=blade_apppack.jar

LOG_PATH=service.log

tips() {

        echo ""

        echo "WARNING!!!......Tips, please use command: sh auto_service.sh [start|stop|restart|status].   For example: sh auto_service.sh start  "

        echo ""

        exit 1

}

start() {

        # 重新获取一下pid,因为其它操作如stop会导致pid的状态更新        

        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`

        # -z 表示如果$pid为空时执行

        if [ -z $pid ]; then

            nohup java -jar /Users/xxx/PackOnline/backEndDeploy/$JAR_NAME > /Users/xxx/PackOnline/backEndDeploy/backEndLog/$LOG_PATH 2>&1 &

            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`

            echo ""

            echo "Service ${JAR_NAME} is starting!pid=${pid}"

            echo "........................Start successfully!........................."

    else

            echo "" 

            echo "Service ${JAR_NAME} is already running,it's pid = ${pid}. If necessary, please use command: sh auto_service.sh restart."          

            echo ""

    fi

}

stop() {

        # 重新获取一下pid,因为其它操作如start会导致pid的状态更新       

        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`

        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到 

        if [ -z $pid ]; then

        echo ""        

        echo "Service ${JAR_NAME} is not running! It's not necessary to stop it!"               

        echo "" 

        else

        kill -9 $pid

        echo ""         

        echo "Service stop successfully!pid:${pid} which has been killed forcibly!"            

        echo "" 

        echo "" > $LOG_PATH

        fi

}

# 输出运行状态方法

status() {

         # 重新获取一下pid,因为其它操作如stop、restart、start等会导致pid的状态更新     

         pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`

          # -z 表示如果$pid为空时执行。注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到        

          if [ -z $pid ];then

          echo ""        

          echo "Service ${JAR_NAME} is not running!"            

          echo ""       

          else

          echo ""        

          echo "Service ${JAR_NAME} is running. It's pid=${pid}"                

          echo ""       

          fi

}

# 重启方法

restart() {

        echo "" 

        echo ".............................Restarting.............................."    

        echo "....................................................................."            

        # 重新获取一下pid,因为其它操作如start会导致pid的状态更新       

        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`

        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到 

        if [ ! -z $pid ]; then

        kill -9 $pid

        fi

        start

        echo "....................Restart successfully!..........................."

}

# 查看日志

logs(){

      # 输出实时日志

     tail -n 100 -f /Users/xxx/PackOnline/backEndDeploy/backEndLog/$LOG_PATH

}

 

# 根据输入参数执行对应方法,不输入则执行tips提示方法

case "$1" in

        "start")

                start

                ;;

        "stop")

                stop

                 ;;

        "status")

                status

                ;;

        "restart")

                restart

                ;;

        "logs")

                logs

                ;;

         *)

                tips

                ;;

esac

nohup 使用参考 https://www.cnblogs.com/baby123/p/6477429.html

 

定时任务开启

运行crontab -e 命令, 加入如下cron 任务,每天23:00 执行

0 23 * * * sh /Users/xxx/PackOnline/backEndDeploy/crontab.sh

#拷贝,将当日的日志拷贝到按照时间命名的文件中

cp /Users/xxx/PackOnline/backEndDeploy/backEndLog/service.log  /Users/xxx/PackOnline/backEndDeploy/backEndLog/`date "+%Y-%m-%d-%H-%M-%S"`_apppack.log

#清空, 将日志文件内容清空,不能删除文件,否则原先的日志输出无法找到对象

echo "" > /Users/hongboni/PackOnline/backEndDeploy/backEndLog/service.log

#检查7天前的文件进行删除

find /Users/hongboni/PackOnline/backEndDeploy/backEndLog -mtime +7 -name "*apppack.log" -exec rm {} \;

关于find 命令按照时间找文件可参考如下图理解:

 

-ctime -n    查找距现在 n*24H 内修改过的文件
-ctime n    查找距现在 n*24H 前, (n+1)*24H 内修改过的文件
-ctime +n    查找距现在 (n+1)*24H 前修改过的文件

 

---(+n)----------|----------(n)----------|----------(-n)---

(n+1)*24H前| (n+1)*24H~n*24H间 |n*24H内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值