LinuxはJavaサービススクリプトを開始します

自動デプロイのない環境で、Javaサービスをデバッグする場合は、毎回前のサービスを強制終了してから再起動する必要があります。プロセス全体には次の3つのコマンドしか含まれていませんが、頻繁にデバッグすると非常にクラッシュします。

ps -ef | grep myjar#myjar为服务名
kill -9 123456 #假设myjar的线程号为123456
nohup java -jar -Xms1024m -Xms2048m myjar.jar & # 习惯使用nohup从后台启动。-Xms为jvm 参数,&不要漏了

シェルスクリプトは、run.shという名前で次のようにパッケージ化されています。

通常版

jarパッケージは事前に準備ができています。ここでは、このjarパッケージの特定のスクリプトをカスタマイズするだけで済みます。

#1,获取myjar的进程号
PID=$(ps -ef|grep myjar| grep -v grep | awk '{print $2}')
#2,启动myjar的函数
start(){
    
    
        nohup java -jar -Xms1024m -Xms2048m myjar.jar -p -i &
}
#3,判断1中获取的PID是否存在,即判断myjar有没有启动
 if [ -z "$PID" ]
then
#4,日志
    echo "Sart the myjar directly "
#5,myjar之前没有启动的话,这里直接调用start函数
    start
else
#6,myjar之前启动过且进程依然存活,则kill掉,然后调用start函数
    echo "kill the existing myjar process firstly."
    kill -9 $PID
    echo " $PID has been killed"
    start
fi

注: run.shの権限は、現在のユーザーが実行できる状態に設定する必要があります。スクリプトにはkillコマンドが含まれているため、root権限で実行することをお勧めします。ファイルのパーミッションを変更するには、chmodコマンドを学習してください

高度なバージョン

Gitはサーバーにインストールされ、jarパッケージはmvnコマンドでパッケージ化されます。パッケージ化する前に毎回最新のコードに基づいているため、gitpullを実行する必要があります。一般的な運用および保守担当者はroot権限を付与しません。 gitなので、通常のユーザーはrunを実行する必要がありますが、実行時にkillする前にsudoを追加する必要があります。完全なスクリプトは次のとおりです。


#get the pid
PID=$(ps -ef|grep myjar| grep -v grep | awk '{print $2}')
start(){
    
    
  echo "======Ready to build project======"
  mvn clean package -Dmaven.test.skip=true #是否跳过unit test,true 为跳过
  # mvn clean package -P uat -Dmaven.test.skip=true #是否跳过unit test,true 为跳过.
  #-P指的是profile,uat指的是测试环境,pom中配置了profile才需要加上
  #-P 环境
  echo "======Build finished, ready to run======"
  nohup /usr/java/bin/java -jar -Xms1024m -Xms2048m target/myjar.jar  &
  tail -f nohup.out
}
echo "======Ready to get latest code from repository======"
git pull
if [ -z "$PID" ]
then
  echo "Sart the myjar directly "
  start
else
  echo "kill the existing myjar process firstly."
  sudo kill -9 $PID # sudo一定要加
  echo " $PID has been killed"
  start
fi

次回起動するときは、run.shが直接配置されているディレクトリを入力します。/run.sh、ディレクトリを入力しない場合は、。/ x / x / x /run.shなどのディレクトリを用意する必要があります。

おすすめ

転載: blog.csdn.net/hongyinanhai00/article/details/105961711