当前位置: 首页 > news >正文

java程序 .exe启动nginx防止重复启动,已解决

  1. java代码生成好的.exe启动nginx服务程序
    在这里插入图片描述

  2. 根据nginx占用端口来解决nginx服务重复启动问题(下面代码了解代码逻辑后根据自己的业务需求修改即可)

代码:

package org.example;import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.List;/*** @author ${USER}* @author ${DATE}*/
public class Main {public static boolean isPortUse(int port) {try (Socket socket = new Socket()) {socket.connect(new InetSocketAddress("localhost", port));return true;} catch (Exception e) {return false;}}public static int portNginxConf() {Path nginxConfPath = Paths.get(".\\conf\\nginx.conf"); // 修改为nginx.conf文件的实际路径int port = 0;try {List<String> lines = Files.readAllLines(nginxConfPath);for (String line : lines) {if (line.contains("listen")) {if (line.indexOf("#") != -1) {line = line.split("#")[0];}if (line.indexOf(";") != -1) {line = line.split(";")[0];}line = line.split("listen")[1];port = Integer.parseInt(line.trim());System.out.println("Port: " + port);break; // 如果只需要找到一个端口号,就退出循环}}} catch (IOException e) {e.printStackTrace();}return port;}public static void main(String[] args) {try {int port = portNginxConf();if (port != 0) {if (isPortUse(port) == false) {ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "start nginx"); // /c参数表示执行后关闭CMD窗口Process process = processBuilder.start();TrayIcon trayIcon = new TrayIcon(new ImageIcon("nginx.png").getImage());SystemTray.getSystemTray().add(trayIcon);// 等待命令执行完成process.waitFor();}}} catch (AWTException e) {throw new RuntimeException(e);} catch (InterruptedException | IOException e) {throw new RuntimeException(e);}}
}
  1. 启动nginx用到的nginx.exe 和nginx图标我已经进行隐藏显示
    在这里插入图片描述
http://www.lryc.cn/news/335898.html

相关文章:

  • 二十一、Rust 反射 获取类型
  • Flutter Engine引擎概念
  • 【运行环境】加载资源的形式
  • 备战蓝桥杯Day40 - 第11届python组真题 - C跑步锻炼
  • 书生·浦语大模型第二期实战营第二课笔记和基础作业
  • 成功解决> 错误: 无效的源发行版:17
  • 深度剖析:网络安全中的红蓝对抗策略
  • Java异常处理之旅:解救迷失的程序员(二)
  • 网络安全介绍
  • 分享一个好看的APP下载分发页,App Store风格
  • C++ 获取数组大小、多维数组操作详解
  • 苹果电脑怎么彻底删除软件 苹果电脑卸载软件在哪里 cleanmymac x怎么卸载 mac废纸篓怎么删除
  • STM32F407 FSMC并口读取AD7606
  • WebGPU vs. 像素流
  • Windows下docker-compose部署DolphinScheduler
  • 微服务项目sc2024通用Base工程
  • git学习 1
  • HTML - 请你说一下如何阻止a标签跳转
  • 【CV】ORB算法
  • 【算法】Cordic算法的原理及matlab/verilog应用
  • QT:信号与槽
  • 以动态库链接库 .dll 探索结构体参数
  • vue快速入门(三)差值表达式
  • RabbitMQ的交换机与队列
  • Spring的 IOC和AOP编程思想
  • Qt中显示hex数据的控件
  • python web 开发 - 常用Web框架
  • 设计模式——适配器模式06
  • 【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink
  • Web 前端性能优化之八:前端性能检测实践