Shell脚本优化项目启停
日常工作中,部署运行是最基础的操作,开发/运维人员都会告诉你如下:
- ps -ef | grep your.jar
- kill -9 [pid] 备注 -9 真的慎用
- 备份你的jar包,部署你的新jar包
- 再启动项目,nohup java -jar your.jar >/path/to/your/app.log &
但是 ! 但是 ! 但是 上面的操作久了 你就会觉得真麻烦! 如果你不嫌麻烦,那就继续这么做吧
备注: kill -15 [pid] 当然更好,或者 kill [pid]。
备注: 合理使用 chatGPT等是一个好的工作方式。
stop.sh
写一个项目停止的脚本,替代步骤1和步骤2。
#!/bin/bash
# Specify the name of the JAR file to stop
jar_name="xx.jar"
# Find the process ID (PID) of the JAR
pid=$(ps aux | grep "$jar_name" | grep -v "grep" | awk '{print $2}')
# Check if the process is running
if [ -z "$pid" ]; then
echo "No process found for $jar_name"
else
echo "Stopping process $pid for $jar_name"
kill $pid
fi
在Linux/Unix系统中,你可以使用chmod +x stop.sh
命令赋予脚本执行权限,然后通过./stop.sh
命令执行脚本。
start.sh
写一个项目启动的脚本,替代步骤4。
可能你觉得用步骤4也挺好的,个人觉得使用脚本更好的原因如下:
- 标准化,团队中有一个标准是高效的前提。
- 简单,团队中有标准,运维才会减少错误的发生。比如A启动加了个参数,B不知道,更多的时候,错误的发生是信息不对称。
#!/bin/bash
# 项目名称
APP_NAME="your_app.jar"
# 设置jar包位置
APP_PATH="/your/app/apply/path/your_app.jar"
# 设置Java虚拟机的内存参数
JAVA_OPTS="-Xmx512m -Xms256m"
# 设置应用日志路径
APP_LOG_PATH="/your/app/apply/path/app.log"
# 设置应用错误日志
APP_ERROR_LOG_PATH="/your/app/apply/path/error.log"
# 启动JAR包,并将标准错误输出重定向到日志文件
java $JAVA_OPTS -jar $APP_PATH >> $APP_LOG_PATH 2>> $APP_ERROR_LOG_PATH &
echo "正在启动应用 $APP_NAME"
# 获取启动的Java进程ID
JAVA_PID=$!
# 等待Java程序启动完成,最多等待60秒
timeout=60
while [ $timeout -gt 0 ]
do
# 检查端口是否被监听 端口 写你自己的程序端口哈
if netstat -tuln | grep ":9002" >/dev/null; then
echo "Java程序启动成功。"
exit 0
else
echo "Java程序正在启动...."
fi
sleep 1
timeout=$((timeout - 1))
done
echo "程序启动超时或失败,请查看日志确定程序状态 ${$APP_LOG_PATH}"
备注:脚本内容仅供参考,毕竟需求决定你脚本内容! 这里仅仅是抛砖引玉!谢谢