Linux下Java Python啟動(dòng)管理腳本方便程序管理
引言
分享一個(gè)從網(wǎng)絡(luò)上搜集到的Java/Python管理腳本,方便在Linux操作系統(tǒng)下管理你的Java或Python應(yīng)用程序,只需要對(duì)其進(jìn)行稍加修改即可投入生產(chǎn)使用。
建議將腳本修改為startup.sh,并賦予可執(zhí)行權(quán)限:
chmod +x startup.sh
下面是完成的腳本:
1.Java啟動(dòng)腳本
在腳本中修改JAVA_HOME變量的地址及SERVICE_NAME中jar包的名稱,將啟動(dòng)腳本與jar包置于同一目錄下即可。
#!/bin/bash
#網(wǎng)址:aaa.al
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 "項(xiàng)目地址: ${SERVICE_DIR}/${JAR_NAME}"
echo ""
echo "你可以使用如下參數(shù)進(jìn)行操作"
echo "start -啟動(dòng)當(dāng)前項(xiàng)目"
echo "stop -停止當(dāng)前項(xiàng)目"
echo "restart -重啟當(dāng)前項(xiàng)目"
echo ""
echo "-------------------------------------"
;;
esac
exit 0啟動(dòng)命令:
./startup.sh start
停止命令:
./startup.sh stop
重啟命令:
./startup.sh restart
2.python啟動(dòng)腳本
同樣的方式,定義項(xiàng)目使用的虛擬環(huán)境地址venvPath,在啟動(dòng)項(xiàng)目時(shí)會(huì)激活虛擬環(huán)境來(lái)運(yùn)行python腳本。如果您沒(méi)有使用虛擬環(huán)境,可根據(jù)需求注釋虛擬環(huán)境相關(guān)腳本。
#!/bin/bash
#網(wǎng)址:aaa.al
# 服務(wù)配置
# python 項(xiàng)目使用的虛擬環(huán)境路徑
venvPath="/home/ops/add_missing_room_detail/py36"
# python 項(xiàng)目的路徑
projectPath="/home/ops/add_missing_room_detail/HotelGo2DelonixPmx"
# python 項(xiàng)目啟動(dòng)命令
CMD="python fix_missing_rates.py"
# 啟動(dòng)進(jìn)程函數(shù)
start_process() {
# 判斷進(jìn)程是否已經(jīng)在運(yùn)行,如果已經(jīng)在運(yùn)行則不需要重復(fù)啟動(dòng)
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虛擬環(huán)境
echo "activate python venv3 $venvPath"
source $venvPath"/bin/activate"
cd $projectPath
# 后臺(tái)運(yùn)行執(zhí)行命令,將日志輸出到文件runoob.log
nohup $CMD >runoob.log 2>&1 &
start_pid=$!
# 判斷進(jìn)程是否成功啟動(dòng)
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
}
# 停止進(jìn)程函數(shù)
stop_process() {
# 根據(jù)進(jìn)程名過(guò)濾出進(jìn)程id,并結(jié)束進(jìn)程
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
}
# 根據(jù)傳入?yún)?shù)執(zhí)行對(duì)應(yīng)的操作
case $1 in
start)
start_process
;;
stop)
stop_process
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac啟動(dòng)項(xiàng)目:
./startup.sh start
停止項(xiàng)目:
./startup.sh stop
以上就是Linux下Java/Python啟動(dòng)管理腳本方便程序管理的詳細(xì)內(nèi)容,更多關(guān)于Linux啟動(dòng)JavaPython管理腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java編程一個(gè)隨機(jī)數(shù)產(chǎn)生模塊代碼分享
這篇文章主要介紹了Java編程一個(gè)隨機(jī)數(shù)產(chǎn)生模塊代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
在Spring項(xiàng)目中引入高版本依賴并解決低版本沖突問(wèn)題的解決方法
在Spring項(xiàng)目的開發(fā)過(guò)程中,依賴管理是一個(gè)非常重要且復(fù)雜的問(wèn)題,我們可能需要引入更高版本的依賴來(lái)使用新特性或修復(fù)舊版本的Bug,然而,這些高版本依賴可能會(huì)與項(xiàng)目中已有的低版本依賴產(chǎn)生沖突,本文將詳細(xì)探討如何在Spring中引入高版本依賴,并解決低版本依賴沖突的問(wèn)題2025-03-03
Maven如何解決添加依賴之后沒(méi)有加載jar包報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Maven如何解決添加依賴之后沒(méi)有加載jar包報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
mybatis的大于小于號(hào)轉(zhuǎn)義符號(hào)一覽
這篇文章主要介紹了mybatis的大于小于號(hào)轉(zhuǎn)義符號(hào)一覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
分享關(guān)于JAVA 中使用Preferences讀寫注冊(cè)表時(shí)要注意的地方
這篇文章介紹了關(guān)于JAVA 中使用Preferences讀寫注冊(cè)表時(shí)要注意的地方,有需要的朋友可以參考一下2013-08-08
簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Spring中的接口重試機(jī)制spring-retry之listeners參數(shù)解析
這篇文章主要介紹了Spring中的接口重試機(jī)制spring-retry之listeners參數(shù)解析,注解@Retryable有一個(gè)參數(shù)listeners沒(méi)有說(shuō)明,那么本篇文章我們?cè)敿?xì)介紹一個(gè)這個(gè)參數(shù)的用,需要的朋友可以參考下2024-01-01
java實(shí)現(xiàn)發(fā)送手機(jī)短信
這篇文章主要介紹了java實(shí)現(xiàn)發(fā)送手機(jī)短信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
java通過(guò)JFrame做一個(gè)登錄系統(tǒng)的界面完整代碼示例
這篇文章主要介紹了java通過(guò)JFrame做一個(gè)登錄系統(tǒng)的界面完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12

