操作系统实验四:程序部署(linux环境Shell脚本部署jar)
实验四:程序部署在linux系统部署一个HelloWorld程序• 写启动脚本,满足退出登陆后,程序能照常运行• 写终止脚本,满足软终止,即程序退出前打出一个“quiting” 消息。1.在IDEA下编写HelloWorld程序需求:可接受linux kill -15 即SIGTERM信号,接受到此信号后打印出“quitting”信息后退出每三秒输出“hello world is running”
实验四:程序部署
实验环境:
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
此时已经关闭,输出信息停止失败!
更多推荐
所有评论(0)