脚本功能概述
该脚本可以用来检查某个特定端口(比如 9999
)是否被占用,并且可以根据用户的确认来停止正在监听该端口的进程。此外,脚本还可以根据用户的选择启动 Java 应用程序,并将输出重定向到一个日志文件。
创建脚本
使用vim创建一个新文件,命名为 start.sh
并将下面的代码粘贴进去。
查看代码
bash
#!/bin/bash
JAR_NAME="boot-cengxuyuan.jar" # jar包的名字
PORT="9999" # 端口号
LOG_NAME="./$JAR_NAME.log" # 控制台日志位置
echo "netstat -tulnp | grep ':$PORT' 的结果如下:"
netstat -tulnp | grep ":$PORT"
# 检查是否有进程监听端口
if netstat -tulnp | grep ":$PORT" &> /dev/null; then
PID=$(netstat -tulnp | grep ":$PORT" | awk '{print$7}' | sed 's/\/.*//')
echo "找到的PID: $PID"
echo "检测到有进程监听端口$PORT,您确定要停止它吗?(y/n)"
read confirm
if [[ "$confirm" != "y" ]]; then
echo "取消操作。"
exit 1
fi
if [ -z "$PID" ]; then
echo "没有找到监听端口$PORT的进程"
exit 1
fi
echo "正在杀死进程 $PID"
kill $PID
if [ $? -eq 0 ]; then
echo "进程已成功杀死"
else
echo "杀死进程失败"
exit 1
fi
else
echo "没有找到监听端口$PORT的进程"
fi
# 无论是否有进程监听端口,都询问用户是否启动Java应用程序
echo "是否启动$JAR_NAME?(y/n)"
read confirm1
if [[ "$confirm1" != "y" ]]; then
echo "取消操作。"
exit 1
fi
nohup java -jar "$JAR_NAME" > "$LOG_NAME" 2>&1 &
echo "启动$JAR_NAME成功!启动完成可能需要点时间"
echo "最后netstat -tulnp | grep ':$PORT' 的结果如下:"
netstat -tulnp | grep ":$PORT"
变量定义
bash
JAR_NAME="boot-cengxuyuan.jar" # jar包的名字
PORT="9999" # 应用程序监听的端口号
LOG_NAME="./$JAR_NAME.log" # 日志文件的位置
这里定义了三个变量,分别用于存储jar包的名称、应用程序监听的端口号以及控制台日志文件的位置。
检查端口监听状态
bash
echo "netstat -tulnp | grep ':$PORT' 的结果如下:"
netstat -tulnp | grep ":$PORT"
这两行命令会打印出当前监听指定端口号(9999)的进程。netstat -tulnp
会列出所有监听端口和对应的进程信息,然后通过grep
筛选出包含特定端口号的行。
杀死监听端口的进程
bash
if netstat -tulnp | grep ":$PORT" &> /dev/null; then
PID=$(netstat -tulnp | grep ":$PORT" | awk '{print$7}' | sed 's/\/.*//')
echo "找到的PID: $PID"
# ... 省略了询问用户和杀死进程的代码 ...
fi
如果发现有进程正在监听端口9999,脚本会提取该进程的PID(进程标识符)。然后,脚本会询问用户是否要停止该进程。如果用户确认,脚本将使用kill
命令停止该进程。
询问用户是否启动Java应用程序
bash
echo "是否启动$JAR_NAME?(y/n)"
read confirm1
if [[ "$confirm1" != "y" ]]; then
echo "取消操作。"
exit 1
fi
无论之前是否有进程在监听端口,脚本都会询问用户是否要启动jar包。如果用户回答不是“y”,则脚本将取消操作并退出。
启动Java应用程序
bash
nohup java -jar "$JAR_NAME" > "$LOG_NAME" 2>&1 &
echo "启动$JAR_NAME成功!启动完成可能需要点时间"
如果用户确认启动jar包,脚本将使用nohup
命令在后台启动Java应用程序,并将标准输出和标准错误重定向到日志文件。&
符号表示将命令放入后台执行。
打印最终端口监听状态
bash
echo "最后netstat -tulnp | grep ':$PORT' 的结果如下:"
netstat -tulnp | grep ":$PORT"
最后,脚本再次打印出端口监听状态,以便确认应用程序是否成功启动并监听端口。
给脚本执行权限
在终端中运行以下命令,使脚本可执行:
bash
chmod +x start.sh
运行脚本
在终端中,使用以下命令运行脚本:
bash
./start.sh