欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

操作系统实验四:程序部署(linux环境Shell脚本部署jar)

程序员文章站 2022-03-01 13:44:02
实验四:程序部署在linux系统部署一个HelloWorld程序• 写启动脚本,满足退出登陆后,程序能照常运行• 写终止脚本,满足软终止,即程序退出前打出一个“quiting” 消息。1.在IDEA下编写HelloWorld程序需求:可接受linux kill -15 即SIGTERM信号,接受到此信号后打印出“quitting”信息后退出每三秒输出“hello world is running”程序源码:import sun.misc.Signal;import sun.misc....

实验四:程序部署

实验环境:

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系统下
操作系统实验四:程序部署(linux环境Shell脚本部署jar)
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

操作系统实验四:程序部署(linux环境Shell脚本部署jar)
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

操作系统实验四:程序部署(linux环境Shell脚本部署jar)

测试部署:

1.执行启动脚本

sh start.sh	//启动脚本
ps -ef | grep HelloWorld //查看HelloWorld进程

操作系统实验四:程序部署(linux环境Shell脚本部署jar)
脚本执行成功!进程号为1765
2.使用 tail -f run.log 命令动态查看日志
操作系统实验四:程序部署(linux环境Shell脚本部署jar)
每三秒打印一次”hello world is running"!
当再次输入启动脚本命令时,输出信息,不再启动
操作系统实验四:程序部署(linux环境Shell脚本部署jar)

3.测试关闭脚本
命令:

sh stop.sh //执行关闭脚本
ps -ef | grep HelloWorld //查看HelloWorld进程

操作系统实验四:程序部署(linux环境Shell脚本部署jar)
程序关闭成功!
4.执行命令 cat run.log 查看日志
操作系统实验四:程序部署(linux环境Shell脚本部署jar)
输出“quitting”成功!!!
再次输入 sh stop.sh
操作系统实验四:程序部署(linux环境Shell脚本部署jar)
此时已经关闭,输出信息停止失败!

本文地址:https://blog.csdn.net/qq_45273552/article/details/110632090