调用systemd来关机
This commit is contained in:
parent
513ba7ad8c
commit
5a975a1195
1 changed files with 7 additions and 48 deletions
|
@ -6,7 +6,6 @@ import com.velocitypowered.api.event.player.ServerConnectedEvent;
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import de.strifel.VTools.VTools;
|
import de.strifel.VTools.VTools;
|
||||||
import de.strifel.VTools.listeners.TGBridge;
|
import de.strifel.VTools.listeners.TGBridge;
|
||||||
import okhttp3.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -14,11 +13,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
public class ServerCloser {
|
public class ServerCloser {
|
||||||
private static final long MINUTE = 60L * 1000;
|
private static final long MINUTE = 60L * 1000;
|
||||||
private static final OkHttpClient CLIENT = new OkHttpClient();
|
|
||||||
|
|
||||||
private static final String ACTION_STOP_JSON = "{\"action\":\"stop\"}";
|
|
||||||
@SuppressWarnings("java:S1068")
|
|
||||||
private static final String ACTION_START_JSON = "{\"action\":\"start\"}";
|
|
||||||
private final VTools plugin;
|
private final VTools plugin;
|
||||||
private final ProxyServer server;
|
private final ProxyServer server;
|
||||||
|
|
||||||
|
@ -31,28 +26,6 @@ public class ServerCloser {
|
||||||
this.server = plugin.getServer();
|
this.server = plugin.getServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean executeAzure() {
|
|
||||||
return executeAzure(ACTION_STOP_JSON);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean executeAzure(String action) {
|
|
||||||
RequestBody requestBody = RequestBody.create(action, MediaType.parse("application/json"));
|
|
||||||
Request request = new Request.Builder()
|
|
||||||
.url(plugin.getConfigOrDefault("azure_api_url", "https://example.com/"))
|
|
||||||
.post(requestBody)
|
|
||||||
.addHeader("Content-Type", "application/json")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
try (Response response = CLIENT.newCall(request).execute()) {
|
|
||||||
String body = response.body() == null ? "null" : response.body().string();
|
|
||||||
plugin.logger.info("ServerCloser: http request response: {} ({}).", body, response.code());
|
|
||||||
return (response.code() >= 200 && response.code() < 300);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void close() {
|
private void close() {
|
||||||
if (!INSTANCE.server.getAllPlayers().isEmpty()) {
|
if (!INSTANCE.server.getAllPlayers().isEmpty()) {
|
||||||
|
@ -60,24 +33,10 @@ public class ServerCloser {
|
||||||
TGBridge.error("ServerCloser: #bug @NaAlOH4 定时器到点时发现服务器有人。这不应发生,因为定时器本应该被打断。");
|
TGBridge.error("ServerCloser: #bug @NaAlOH4 定时器到点时发现服务器有人。这不应发生,因为定时器本应该被打断。");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean httpSuccess = false;
|
String apiUrl = plugin.getConfigOrDefault("azure_api_url", "https://example.com/");
|
||||||
for (int i = 0; i < 3; i++) {
|
|
||||||
httpSuccess = executeAzure();
|
|
||||||
if (httpSuccess) {
|
|
||||||
TGBridge.log("ServerCloser: 向 azure 发送关机命令成功,正在关闭 pymcd.");
|
|
||||||
TGBridge.setShuttingDown(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!httpSuccess) {
|
|
||||||
TGBridge.error("服务器关机 http 请求失效,服务器可能没有正常关闭。");
|
|
||||||
} else {
|
|
||||||
try {
|
try {
|
||||||
Runtime.getRuntime().exec(new String[]{"pkill", "pymcd"});
|
Runtime.getRuntime().exec(new String[]{"systemd-run", "--description=pymcd_stop", "--quiet", "--user", "--collect", "-p", "StandardInput=data", "-p", "StandardInputData=c2V0IC1lCnA9IiQocGdyZXAgLWYgcHltY2QucHkgLUFvKSIKa2lsbCAtSU5UICIkcCIKdGFpbCAtLXBpZD0iJHAiIC1mIC9kZXYvbnVsbApjdXJsIC1zIC1IICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24iIC1kICJ7XCJhY3Rpb25cIjpcInN0b3BcIn0iICIkMSIK", "bash", "-s", apiUrl});
|
||||||
} catch (IOException e) {
|
} catch (IOException ignored) {}
|
||||||
TGBridge.error("关闭 pymcd 时出现问题:" + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean firstInit;
|
private boolean firstInit;
|
||||||
|
|
Loading…
Reference in a new issue