分享一个 Java/Python 管理脚本,方便在 Linux 操作系统下管理你的 Java 或 Python 应用程序,只需要对其进行稍加修改即可投入生产使用。

更多内容可以学习《测试工程师 Python 工具开发实战》书籍《大话性能测试 JMeter 实战》书籍

建议将脚本修改为 startup.sh,并赋予可执行权限:

chmod +x startup.sh

下面是完成的脚本:

1.Java 启动脚本

在脚本中修改 JAVA_HOME 变量的地址及 SERVICE_NAME 中 jar 包的名称,将启动脚本与 jar 包置于同一目录下即可。

#!/bin/bash

export JAVA_HOME=/usr/local/jdk1.8.0_271
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib

## service name
SERVICE_ROOT=$(dirname $(dirname "$PWD"))
SERVICE_DIR=$(cd $(dirname $0); pwd)
SERVICE_NAME=test.jar
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid

cd $SERVICE_DIR

case "$1" in

    start)
        nohup java -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=1024m -jar $JAR_NAME > $SERVICE_NAME.log 2>&1 &
        echo $! > $SERVICE_DIR/$PID
        echo "=== start $SERVICE_NAME"
        ;;

    stop)
        kill `cat $SERVICE_DIR/$PID`
        rm -rf $SERVICE_DIR/$PID
        echo "=== stop $SERVICE_NAME"

        sleep 5
        P_ID=`ps -ef | grep "$SERVICE_NAME" | grep -v grep | grep -v "$0" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "=== $SERVICE_NAME process not exists or stop success"
        else
            echo "=== $SERVICE_NAME process pid is:$P_ID"
            echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
            kill -9 $P_ID
        fi
        ;;

    restart)
        $0 stop
        sleep 2
        $0 start
        echo "=== restart $SERVICE_NAME"
        ;;

    *)
        echo "-------------------------------------"
        echo ""
        echo "项目地址: ${SERVICE_DIR}/${JAR_NAME}"
        echo ""
        echo "你可以使用如下参数进行操作"
        echo "start  -启动当前项目"
        echo "stop  -停止当前项目"
        echo "restart -重启当前项目" 
        echo ""
        echo "-------------------------------------"
        ;;

esac
exit 0

启动命令:

./startup.sh start

停止命令:

./startup.sh stop

重启命令:

./startup.sh restart

2.python 启动脚本

同样的方式,定义项目使用的虚拟环境地址 venvPath,在启动项目时会激活虚拟环境来运行 python 脚本。如果您没有使用虚拟环境,可根据需求注释虚拟环境相关脚本。

#!/bin/bash

# 服务配置
# python 项目使用的虚拟环境路径
venvPath="/home/ops/add_missing_room_detail/py36"
# python 项目的路径
projectPath="/home/ops/add_missing_room_detail/HotelGo2DelonixPmx"
# python 项目启动命令
CMD="python fix_missing_rates.py"

# 启动进程函数
start_process() {
  # 判断进程是否已经在运行,如果已经在运行则不需要重复启动
  start_pid=$(ps aux | grep "$CMD" | grep -v grep | awk '{print $2}')
  if [ -n "$start_pid" ]; then
    echo "The process is already running with PID:" $start_pid
    return 1
  fi

 # 激活python虚拟环境
  echo "activate python venv3  $venvPath"
  source $venvPath"/bin/activate"
  cd $projectPath
  # 后台运行执行命令,将日志输出到文件runoob.log
  nohup $CMD >runoob.log 2>&1 &
  start_pid=$!

  # 判断进程是否成功启动
  if [ -z "$start_pid" ]; then
    echo "Fail to start process"
    return 1
  else
    echo "The process has been started with PID:" $start_pid
    return 0
  fi
}

# 停止进程函数
stop_process() {
  # 根据进程名过滤出进程id,并结束进程
  start_pid=$(ps aux | grep "$CMD" | grep -v grep | awk '{print $2}')
  if [ -z "$start_pid" ]; then
    echo "No process to stop."
    return 1
  else
    kill -9 $start_pid
    echo "The process has been stopped with PID:" $start_pid
    return 0
  fi
}

# 根据传入参数执行对应的操作
case $1 in
start)
  start_process
  ;;
stop)
  stop_process
  ;;
*)
  echo "Usage: $0 {start|stop}"
  exit 1
  ;;
esac

启动项目:

./startup.sh start

停止项目:

./startup.sh stop

更多内容可以学习《测试工程师 Python 工具开发实战》书籍《大话性能测试 JMeter 实战》书籍


↙↙↙阅读原文可查看相关链接,并与作者交流