实验四:程序部署

实验环境:

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
在这里插入图片描述
此时已经关闭,输出信息停止失败!

Logo

更多推荐