分享两个实用的shell脚本

博客 分享
0 191
张三
张三 2022-04-23 11:58:18
悬赏:0 积分 收藏

分享两个实用的shell脚本

各位,早上好啊~ 发现许久没有分享过技术文章了,今天分享两个部署项目时候比较实用的shell脚本

一键部署shell脚本

由于个人部署,会习惯把jar放到lib目录下面,如果你没有这个习惯,可以适当做一些修改。该脚本提供了一键启动、停止、重启、检查操作

deploy.sh代码
#!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改cd ../lib/jar_path=`pwd`APP_NAME=`ls -al  *.jar | awk '{print $9}'`#使用说明,用来提示输入参数usage() {    echo "Usage: sh robotcenter.sh [start|stop|restart|status]"    exit 1}#检查程序是否在运行is_exist(){  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`  #如果不存在返回1,存在返回0       if [ -z "${pid}" ]; then   return 1  else    return 0  fi}#启动方法start(){  is_exist  if [ $? -eq 0 ]; then    echo "${APP_NAME} is already running. pid=${pid}"  else    cd /home/dtx/common-shell    echo `pwd`    # 引入公用shell脚本参数,可以自行考虑需不需要    . common_params.sh    echo "启动堆大小: $java_mem_size"    echo "------------------------------------------------------------------------------------------------------------"    echo "java_gc: $java_gc"    echo "------------------------------------------------------------------------------------------------------------"    echo "启动profile参数:$profile"    cd ${jar_path}    nohup java  ${java_mem_size} ${java_gc}  -jar ${APP_NAME} ${profile} >/dev/null 2>&1 &    is_exist    if [ $? -eq 0 ]; then       echo "${APP_NAME} is running"    else       echo "${APP_NAME} is running failed"    fi    sleep 2  fi}#停止方法stop(){  is_exist  if [ $? -eq "0" ]; then    kill -9 $pid    echo "${APP_NAME} has stopped"  else    echo "${APP_NAME} is not running"  fi  }#输出运行状态status(){  is_exist  if [ $? -eq "0" ]; then    echo "${APP_NAME} is running. Pid is ${pid}"  else    echo "${APP_NAME} is NOT running."  fi}#重启restart(){  stop  sleep 5  start}#根据输入参数,选择执行对应方法,不输入则执行使用说明case "$1" in  "start")    start    ;;  "stop")    stop    ;;  "status")    status    ;;  "restart")    restart    ;;  *)    usage    ;;esac

重启效果如下

image-20220423103254891

彩色日志操作

也是由于个人习惯,回把log4j打印的日志放到logs文件下面,可以自行做一些小调整即可

colorfullog.sh代码
#! /bin/bashtail  -300f  ../logs/stdout.log | perl -pe's/(INFO)|(DEBUG)|(WARN)|(ERROR)|(^[0-9-:.\s]{10,23})|((?<=[OGNR]\s)[0-9]{1,5})|((?<=\[.{15}\]\s).{1,40}(?=\s(:\s)|\s))/\e[1;32m$1\e[0m\e[1;36m$2\e[0m\e[1;33m$3\e[0m\e[1;31m$4\e[0m\e[1;34m$5\e[0m\e[1;35m$6\e[0m\e[1;36m$7\e[0m/g'

打印出来的效果

image-20220423103023248

再进一步操作

微服务时代,项目肯定是不会只有一个jar的,就拿本人自己写的项目来看(也是因为没有采用容器化部署,感觉搞不好,坑太多了),目前也是6个包了,尽管上述操作也还简单方便,只需要进到每个模块里面,执行deploy.sh即可

不过本着精益求精的思想理念,到底有没有更加好方法,可以一劳永逸的,即使之后加服务,不需要修改太多东西的操作

基于此,在模块平级里,新建一个common-shell的文件夹,里面放一个deploy_all.sh

deploy_all.sh代码
#! /bin/bash## author:Amg## 该shell脚本用于一键启动、停止、重启所有设置好的jar文件cd ..base_path=`pwd`# 即使加服务,只要符合约定就可以被扫描出来centers=`ls -al | grep dtx | awk '{print $9}'`echo "---------------------base path: ${base_path} ------------------------"## 启动所有项目start(){  for line in $centers do   jarPath=${base_path}/$line/bin/   echo "当前所在目录: ${jarPath},即将启动目录下的jar "   cd ${jarPath}   sh deploy.sh start   echo "================================" done}## 停止所有项目stop(){ for line in $centers do   jarPath=${base_path}/$line/bin/   echo "当前所在目录: ${jarPath},即将停止目录下的jar "   cd ${jarPath}   sh deploy.sh stop   echo "================================" done}## 重启所有项目restart(){ for line in $centers do   jarPath=${base_path}/$line/bin/   echo "当前所在目录: ${jarPath},即将重启目录下的jar "   cd ${jarPath}   sh deploy.sh restart   echo "================================" done}##检查项目状态status(){ for line in $centers do   jarPath=${base_path}/$line/bin/   echo "当前所在目录: ${jarPath},即将检查目录下的jar运行情况"   cd ${jarPath}   sh deploy.sh status   echo "================================" done}usage(){ echo "该脚本用于一键启停,具体用法有start、stop、restart status"}#根据输入参数,选择执行对应方法,不输入则执行使用说明case "$1" in  "start")    start    ;;  "stop")    stop    ;;  "status")    status    ;;  "restart")    restart    ;;  *)    usage    ;;esac

image-20220423104246283

该脚本的作用其实很简单,就是不断的循环进入到各个具体的模块,调用上面的deploy脚本,进行一系列的操作

基于约定大于配置的思想,如果我们后续加服务,只需要在平级下面创建相同规则的文件夹,里面的结构也是存放lib,logs,bin即可

posted @ 2022-04-23 10:59 码农Amg 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员