實驗四:程式部署
實驗環境:
1.linux環境
2.mobaXterm終端
3.linux下的jdk環境
linux搭建jdk環境可參見本篇文章:
https://blog.csdn.net/qq_45273552/article/details/109997711
實驗要求
在linux系統部署一個HelloWorld程式
? 寫啟動腳本,滿足退出登陸后,程式能照常運行
? 寫終止腳本,滿足軟終止,即程式退出前打出一個“quiting” 訊息,
實驗方案
1.在IDEA下撰寫HelloWorld程式
需求:
- 可接受linux kill -15 即SIGTERM信號,接受到此信號后列印出“quitting”資訊后退出
- 每三秒輸出“hello world is running”
程式原始碼:
import sun.misc.Signal;
import sun.misc.SignalHandler;
@SuppressWarnings("restriction")//抑制禁止使用勸阻或禁止參考的警告
public class TestSignal implements SignalHandler {
private void signalCallback(Signal signal) {
//"TREM"表示SIGTERM-此信號請求行程停止運行,即linux命令中的kill -15 [行程號],對應的-15
if (signal.getName().equals("TERM")) {
// 程式關閉
try {
System.out.println("quitting!");
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(signal.getName() + "is recevied.");
}
@Override
public void handle(Signal signalName) {
signalCallback(signalName);//回呼函式,呼叫上面signalCallback方法
}
public static void main(String[] args) throws InterruptedException {
TestSignal testSignalHandler = new TestSignal();
/*SIGTERM-此信號請求行程停止運行,這個信號可以忽略,行程有時間正常關閉,當一個程式正常關閉時,
這意味著它有時間保存進度和釋放資源,換句話說,它不是被迫停止的,SIGINT與SIGTERM非常相似,*/
Signal.handle(new Signal("TERM"), testSignalHandler);
for (;;) {
Thread.sleep(3000);
System.out.println("hello world is running......");
} } }
2.利用Idea將程式打成jar包,利用終端工具MobaXterm復制到linux系統下

3.編輯啟動腳本:
需求:
- 自動檢測程式是否執行,如已執行則回傳資訊,
- 將輸入日志寫入到同級目錄的run.log檔案里
命令:vim start.sh
Shell腳本如下:
#!/bin/sh
PROJECTNAME=HelloWorld
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}'`
if [ $pid ]; then
echo "$PROJECTNAME is running and pid=$pid"
else
echo "Start success to start $PROJECTNAME ...."
nohup java -jar HelloWorld.jar > run.log &
fi

4.編輯停止腳本
需求:
- 檢查程式是否已經運行,如已運行,則停止,無運行,回傳資訊
- 輸出”quitting“資訊到run.log檔案中
命令:vim stop.sh
腳本檔案如下:
#!/bin/sh
PROJECTNAME=HelloWorld
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}' `
if [ $pid ]; then
echo "$PROJECTNAME is running and pid=$pid"
kill -15 $pid
if [[ $PROJECTNAME -eq 0 ]];then
echo "sucess to stop $PROJECTNAME "
fi
else
echo "fail to stop $PROJECTNAME "
fi

測驗部署:
1.執行啟動腳本
sh start.sh //啟動腳本
ps -ef | grep HelloWorld //查看HelloWorld行程

腳本執行成功!行程號為1765
2.使用 tail -f run.log 命令動態查看日志

每三秒列印一次”hello world is running"!
當再次輸入啟動腳本命令時,輸出資訊,不再啟動

3.測驗關閉腳本
命令:
sh stop.sh //執行關閉腳本
ps -ef | grep HelloWorld //查看HelloWorld行程

程式關閉成功!
4.執行命令 cat run.log 查看日志

輸出“quitting”成功!!!
再次輸入 sh stop.sh

此時已經關閉,輸出資訊停止失敗!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230286.html
標籤:java
