为了方便操作可以将 GameStatusProtect.js 放置 /home/root/pre-publish-new/server_res/gmald/src 目录下,就是跟那个 app.js 一样的目录

在宝塔面板里面同 app.js 操作使用 PM2 添加这个文件,因为要重启执行脚本所以用户设置 root

这个脚本原理就是监听服务端的端口,当端口没有开启时则会进行重启操作。

改脚本依然无法避免游戏过程中断开连接掉出地图后面看看有没有大佬放出修复的服务端吧,不过该自动重启能立马重连进游戏就是,省的再手动重启服务端。

可以手动使用 stop.sh 脚本,kill 关键进程进行测试重启,如果不需要自动重启再 PM2 管理器里面停止该项目即可。

将下面代码命名为GameStatusProtect.js即可

var net = require('net')
var process = require('child_process');
var restartFlag = false;
// 检测端口是否被占用
function portIsOccupied (port) {
 var server = net.createServer().listen(port)
 server.on('listening', function () {
	server.close() // 关闭服务
	if(!restartFlag){
		restartFlag = true;
		var cmd = 'cd /home/root/pre-publish-new/server_res;./run.sh'; // 重启服务
		process.exec(cmd, function(error, stdout, stderr) {
		    console.log("error:"+error);
		    console.log("stdout:"+stdout);
		    console.log("stderr:"+stderr);
		});
		setTimeout(()=>{
			restartFlag = false;
		})
	}
 })
 
 server.on('error', function (err) {
 if (err.code === 'EADDRINUSE') { // 端口已经被使用
  // console.log('The port【' + port + '】 is occupied, please change other port.')
 }
 })
}
 
// 执行
setInterval(()=>{
	portIsOccupied(9027);
	portIsOccupied(7377);
	portIsOccupied(5030);
	portIsOccupied(5050);
	portIsOccupied(5060);
},1000)

4 评论

  1. 楼王

    楼王

  2. 2 楼
    搜源代码57211 发表于 2022-04-09 15:45:25 楼王

    第三方

  3. 3 楼

    感谢楼主分享

  4. 4 楼

    看到这帖子真是高兴!

回复主题

VIP中心
任务中心