mirror of
https://gitee.com/dromara/electron-egg.git
synced 2026-05-14 19:52:10 +08:00
addon java-server
This commit is contained in:
99
electron/addon/javaServer/server.js
Normal file
99
electron/addon/javaServer/server.js
Normal file
@@ -0,0 +1,99 @@
|
||||
const _ = require("lodash");
|
||||
const assert = require("assert");
|
||||
const fs = require("fs");
|
||||
const is = require('electron-is');
|
||||
const path = require("path");
|
||||
const { exec, execSync } = require("child_process");
|
||||
const Utils = require("ee-core").Utils;
|
||||
const ps = require("./ps");
|
||||
|
||||
/**
|
||||
* java server
|
||||
*/
|
||||
class JavaServer {
|
||||
constructor (app) {
|
||||
this.app = app;
|
||||
this.options = app.config.addons.javaServer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务
|
||||
*/
|
||||
async create () {
|
||||
if (!this.options.enable) {
|
||||
return;
|
||||
}
|
||||
|
||||
let port = process.env.EE_JAVA_PORT ? parseInt(process.env.EE_JAVA_PORT) : parseInt(this.options.port);
|
||||
assert(typeof port === "number", "java port required, and must be a number");
|
||||
|
||||
try {
|
||||
const jarName = this.options.name;
|
||||
let softwarePath = path.join(Utils.getExtraResourcesDir(), jarName);
|
||||
let javaOptStr = this.options.opt;
|
||||
let jrePath = path.join(Utils.getExtraResourcesDir(), this.options.jreVersion);
|
||||
let cmdStr = '';
|
||||
|
||||
this.app.console.info("[addon:javaServer] jar file path:", softwarePath);
|
||||
if (!fs.existsSync(softwarePath)) throw new Error('java program does not exist');
|
||||
|
||||
// 替换opt参数
|
||||
javaOptStr = _.replace(javaOptStr, "${port}", port);
|
||||
javaOptStr = _.replace(javaOptStr, "${path}", Utils.getLogDir());
|
||||
|
||||
if (is.windows()) {
|
||||
jrePath = path.join(jrePath, "bin", "javaw.exe");
|
||||
cmdStr = `start ${jrePath} -jar ${javaOptStr} ${softwarePath}`;
|
||||
} else if (is.macOS()) {
|
||||
// 如果提示:不受信任,请执行: sudo spctl --master-disable
|
||||
jrePath = path.join(jrePath, "Contents", "Home", "bin", "java");
|
||||
//cmdStr = `nohup ${jrePath} -jar ${javaOptStr} ${softwarePath} >/dev/null 2>&1 &`;
|
||||
cmdStr = `${jrePath} -jar ${javaOptStr} ${softwarePath}`;
|
||||
} else {
|
||||
// todo linux
|
||||
}
|
||||
|
||||
this.app.logger.info("[addon:javaServer] cmdStr:", cmdStr);
|
||||
exec(cmdStr);
|
||||
|
||||
} catch (err) {
|
||||
this.app.logger.error('[addon:javaServer] throw error:', err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭服务
|
||||
*/
|
||||
async kill () {
|
||||
const jarName = this.options.name;
|
||||
if (is.windows()) {
|
||||
const resultList = ps.lookup({
|
||||
command: "java",
|
||||
where: 'caption="javaw.exe"',
|
||||
arguments: jarName,
|
||||
});
|
||||
|
||||
//this.app.logger.info("[addon:javaServer] resultList:", resultList);
|
||||
resultList.forEach((item) => {
|
||||
ps.kill(item.pid, "SIGKILL", (err) => {
|
||||
if (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
console.info("[addon:javaServer] java程序退出 pid: ", item.pid);
|
||||
});
|
||||
});
|
||||
|
||||
// const cmd = `for /f "tokens=1-5" %i in ('netstat -ano ^| findstr ":${port}"') do taskkill /F /T /PID %m`;
|
||||
// const a = await execSync(cmd, {encoding: 'utf-8'});
|
||||
// app.logger.info("[javaServer] kill:", a);
|
||||
} else if (is.macOS()) {
|
||||
const cmd = `ps -ef | grep java | grep ${jarName} | grep -v grep | awk '{print $2}' | xargs kill -9`;
|
||||
const result = await execSync(cmd);
|
||||
this.app.logger.info("[addon:javaServer] kill:", result != null ? result.toString(): '');
|
||||
} else {
|
||||
// todo linux
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = JavaServer;
|
||||
Reference in New Issue
Block a user