一,判断程序的部署环境是nginx还是windows
/** * 判断操作系统是不是windows * * @return true:是win false:是Linux */ public static boolean judgeOs() { String os = System.getProperty("os.name").toLowerCase(); if (os != null && os.startsWith("windows")) { return true; } else { return false; } }
二,开启nginx
(1)开启windows系统的ngin
/** * 开启windows系统的nginx * @throws IOException */ private static void startWinProc() throws IOException{ String myExe = "cmd /c start nginx"; String CONFPREFIXURL = System.getProperty("user.dir") + File.separator + "nginx" + File.separator + "windows"; File dir = new File(CONFPREFIXURL); String[] str = new String[] {}; // 执行命令 Runtime.getRuntime().exec(myExe, str, dir); }
(2)开启linux系统的nginx
/** * 开启linux的nginx * @throws IOException */ private static void startLinuxProc() throws IOException { System.out.println("开启进程:" + "nginx"); String command1 = "/usr/local/nginx/sbin/nginx"; String pro = executeCmd2(command1); System.out.println(pro); }
(3)跨平台开启Nginx
/** * 跨平台启动nginx * * @throws IOException */ private static void startProc() throws IOException { if (judgeOs()) { startWinProc(); } else { startLinuxProc(); } }
三,关闭nginx
(1)关闭windows系统的nginx
/** *关闭windows系统的nginx * @throws IOException */ public static void KillWin() throws IOException{ executeCmd("taskkill /F /IM " + "nginx.exe"); }
(2)关闭linux系统的nginx
/** * 关闭linux系统的nginx * @throws IOException */ private static void killLinuxProc() throws IOException { String command = "pkill -9 nginx"; executeCmd(command); }
(3)nginx的跨平台关闭
/** * 跨平台关闭nginx * @throws IOException */ public static void killProc() throws IOException { if(judgeOs()){ KillWin(); }else{ killLinuxProc(); } }
四,获取项目所在的磁盘位置
String CONFPREFIXURL = System.getProperty("user.dir");
System.out.println(CONFPREFIXURL);
五,获取项目所在主机ip
/** * 获取项目部署环境的ip
* @return */ public static String getIP() { String url = "";; try { for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements(); ) { NetworkInterface item = e.nextElement(); for (InterfaceAddress address : item.getInterfaceAddresses()) { if (item.isLoopback() || !item.isUp()) { continue; } if (address.getAddress() instanceof Inet4Address) { Inet4Address inet4Address = (Inet4Address) address.getAddress(); url =inet4Address.getHostAddress(); } } } //url = InetAddress.getLocalHost().getHostAddress(); } catch (SocketException e) { throw new RuntimeException(e); } return url; }
更多获取系统变量的方法:https://www.cnblogs.com/excellencesy/p/11278889.html
六,完整工具类
package com.googosoft.until; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Inet4Address; import java.net.InterfaceAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class NginxUtil { /** * * @return 1:代理重启成功 2:进程未开启 3:进程关闭时出错 4:进程启动时出错 */ public static int reStartProc() { int flag = 0; if (findProcess()) { // 进程没开启 try { killProc(); } catch (IOException e) { e.printStackTrace(); System.err.println("nginx.exe" + "线程开启失败"); } finally { if (findProcess()) { flag = 3;// 关闭失败 } } try { startProc(); } catch (IOException e) { e.printStackTrace(); } finally { if (findProcess()) { flag = 1;// 开启成功 } else { flag = 4;// 启动失败 } } } else { // 进程未开启 flag = 2; } return flag; } /** * 关闭nginx进程 * * @return 1:进程关闭成功 2:进程没有开启 3:进程关闭失败 */ public static int stop() { int flag = 0; if (findProcess()) { // 进程开启了 try { killProc(); } catch (IOException e) { e.printStackTrace(); System.err.println("nginx.exe" + "线程关闭失败"); } finally { if (!findProcess()) { flag = 1;// 关闭成功 } else { flag = 3;// 关闭失败 } } } else { // 进程没开启 flag = 2; } return flag; } /** * 跨平台关闭nginx * * @throws IOException */ public static void killProc() throws IOException { if (judgeOs()) { KillWin(); } else { killLinuxProc(); } } /** * 关闭windows系统的nginx * * @throws IOException */ public static void KillWin() throws IOException { executeCmd("taskkill /F /IM " + "nginx.exe"); } /** * @desc 执行cmd命令 */ public static String executeCmd(String command) throws IOException { Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("cmd /c " + command); // Process process = runtime.exec( command); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")); String line = null; StringBuilder build = new StringBuilder(); while ((line = br.readLine()) != null) { System.out.println(line); build.append(line); } return build.toString(); } /** * @desc 执行cmd命令 */ public static String executeCmd2(String command) throws IOException { Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")); String line = null; StringBuilder build = new StringBuilder(); while ((line = br.readLine()) != null) { System.out.println(line); build.append(line); } return build.toString(); } /** * @desc 判断进程是否开启 */ public static boolean findProcess() { String processName = "nginx.exe"; BufferedReader bufferedReader = null; try { Process proc = Runtime.getRuntime().exec("tasklist -fi " + '"' + "imagename eq " + processName + '"'); bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream())); String line = null; while ((line = bufferedReader.readLine()) != null) { if (line.contains(processName)) { return true; } } return false; } catch (Exception ex) { ex.printStackTrace(); return false; } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (Exception ex) { } } } } /** * 关闭linux系统的nginx * * @throws IOException */ private static void killLinuxProc() throws IOException { String command = "pkill -9 nginx"; executeCmd(command); } /** * 打印进程的状态 * * @param programName1 */ public static void logStatus() { boolean flag = findProcess(); if (flag) { System.out.println(); System.err.println("nginx.exe" + "进程状态:开启"); System.out.println(); } else { System.out.println(); System.err.println("nginx.exe" + "进程状态:关闭"); System.out.println(); } } /** * 开启linux的nginx * @throws IOException */ private static void startLinuxProc() throws IOException { System.out.println("开启进程:" + "nginx"); String command1 = "/usr/local/nginx/sbin/nginx"; String pro = executeCmd2(command1); System.out.println(pro); } /** * windows平台开启 * * @throws IOException * 1:开启成功 2:开启失败 3:已开启 */ public static int start() { int flag = 0; if (!findProcess()) { // 进程开启了 try { startProc(); } catch (IOException e) { e.printStackTrace(); System.err.println("nginx.exe" + "线程关闭失败"); } finally { if (findProcess()) { flag = 1;// 开启成功 } else { flag = 2;// 开启失败 } } } else { // 进程已经开启 flag = 3; } return flag; } /** * 跨平台启动nginx * * @throws IOException */ private static void startProc() throws IOException { if (judgeOs()) { startWinProc(); } else { startLinuxProc(); } } /** * 开启windows系统的nginx * * @throws IOException */ private static void startWinProc() throws IOException { String myExe = "cmd /c start nginx"; String CONFPREFIXURL = System.getProperty("user.dir") + File.separator + "nginx" + File.separator + "windows"; File dir = new File(CONFPREFIXURL); String[] str = new String[] {}; // 执行命令 Runtime.getRuntime().exec(myExe, str, dir); } /** * 判断操作系统是不是windows * * @return true:是win false:是Linux */ public static boolean judgeOs() { String os = System.getProperty("os.name").toLowerCase(); if (os != null && os.startsWith("windows")) { return true; } else { return false; } } /** * 获取项目部署环境的ip * * @return */ public static String getIP() { String url = ""; ; try { for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements();) { NetworkInterface item = e.nextElement(); for (InterfaceAddress address : item.getInterfaceAddresses()) { if (item.isLoopback() || !item.isUp()) { continue; } if (address.getAddress() instanceof Inet4Address) { Inet4Address inet4Address = (Inet4Address) address.getAddress(); url = inet4Address.getHostAddress(); } } } // url = InetAddress.getLocalHost().getHostAddress(); } catch (SocketException e) { throw new RuntimeException(e); } return url; } /** * 判断某个字符串是否是数字 * * @param str * @return */ public static boolean isNumer(String str) { for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * 以行为单位读取文件,常用于读面向行的格式化文件 * * @return */ public static int getPort() { String fileName = getConfAddr(); int port = -1; File file = new File(fileName); BufferedReader reader = null; String lastLine = ""; try { reader = new BufferedReader(new FileReader(file)); String tempString = null; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { if (!tempString.trim().startsWith("#") && tempString.trim().length() != 0) { // System.out.println(tempString.trim()); if ("server {".equals(lastLine.trim())) { String content = tempString.trim(); if (content.startsWith("listen") && content.endsWith(";")) { String number = content.replace("listen", "").replace(";", "").trim(); if (isNumer(number)) port = Integer.parseInt(number); } } lastLine = tempString; } } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } return port; } public static String getConfAddr() { String CONFPREFIXURL = System.getProperty("user.dir") + File.separator + "nginx" + File.separator; if (judgeOs()) { CONFPREFIXURL = CONFPREFIXURL + "windows" + File.separator + "conf" + File.separator + "nginx.conf"; } else { // linux的处理 } return CONFPREFIXURL; } public static void main(String[] args) { } }