分享一个 Java/Python 管理脚本,方便在 Linux 操作系统下管理你的 Java 或 Python 应用程序,只需要对其进行稍加修改即可投入生产使用。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍、《大话性能测试 JMeter 实战》书籍
建议将脚本修改为 startup.sh,并赋予可执行权限:
chmod +x startup.sh
下面是完成的脚本:
在脚本中修改 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
同样的方式,定义项目使用的虚拟环境地址 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 实战》书籍