Linux下Java/Python启动管理脚本
分享一个从网络上搜集到的Java/Python管理脚本,方便在Linux操作系统下管理你的Java或Python应用程序,只需要对其进行稍加修改即可投入生产使用。
建议将脚本修改为startup.sh,并赋予可执行权限:
chmod +x startup.sh
下面是完成的脚本:
1.Java启动脚本
在脚本中修改JAVA_HOME变量的地址及SERVICE_NAME中jar包的名称,将启动脚本与jar包置于同一目录下即可。
#!/bin/bash
#网址:aaa.al
export JAVA_HOME=/usr/local/jdk1.8.0_271
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
export CLASSPATH=.😒{JAVA_HOME}/lib
service name
SERVICE_ROOT=$(dirname
(
d
i
r
n
a
m
e
"
(dirname "
(dirname"PWD"))
SERVICE_DIR=$(cd $(dirname
0
)
;
p
w
d
)
S
E
R
V
I
C
E
N
A
M
E
=
t
e
s
t
.
j
a
r
J
A
R
N
A
M
E
=
0); pwd) SERVICE_NAME=test.jar JAR_NAME=
0);pwd)SERVICENAME=test.jarJARNAME=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
#网址:aaa.al
服务配置
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=
(
p
s
a
u
x
∣
g
r
e
p
"
(ps aux | grep "
(psaux∣grep"CMD" | grep -v grep | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 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 KaTeX parse error: Expected 'EOF', got '&' at position 19: … >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=
(
p
s
a
u
x
∣
g
r
e
p
"
(ps aux | grep "
(psaux∣grep"CMD" | grep -v grep | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 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