You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
6 months ago
|
import subprocess
|
||
|
import os
|
||
|
import logging
|
||
|
from flask import Flask, request, jsonify
|
||
|
import signal
|
||
|
import time
|
||
|
import psutil
|
||
|
|
||
|
logging.basicConfig(filename='osiris_listener_playground.log', level=logging.DEBUG, format='%(asctime)s %(message)s')
|
||
|
|
||
|
def read_pid_file(pid_file):
|
||
|
"""Read the PID from the specified PID file."""
|
||
|
try:
|
||
|
with open(pid_file, 'r') as file:
|
||
|
pid = int(file.read().strip())
|
||
|
return pid
|
||
|
except (FileNotFoundError, ValueError):
|
||
|
return None
|
||
|
|
||
|
def is_java_process_running(pid):
|
||
|
"""Check if a Java process with the given PID is running."""
|
||
|
try:
|
||
|
proc = psutil.Process(pid)
|
||
|
if 'java' in proc.name().lower():
|
||
|
return True
|
||
|
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||
|
return False
|
||
|
return False
|
||
|
|
||
|
SCRIPTS = {
|
||
|
"start_gameservers_minecraft": [
|
||
|
# Vanilla (Port 25565)
|
||
|
{"name": "Minecraft Vanilla 1.21", "path": "C:/Users/4lexK/Desktop/GameServers/Minecraft/Vanilla_1-21/start_server.py", "params": ["--java_path", "C:/Program Files/Java/jdk-22/bin", "minecraft_server.1.21"]},
|
||
|
|
||
|
]
|
||
|
}
|
||
|
logging.info("Received request to start minecraft servers.")
|
||
|
|
||
|
|
||
|
current_pid = []
|
||
|
|
||
|
results = []
|
||
|
for script_info in SCRIPTS['start_gameservers_minecraft']:
|
||
|
path = script_info["path"]
|
||
|
params = script_info["params"]
|
||
|
script_name = script_info["name"]
|
||
|
pid_file = os.path.join(os.path.dirname(path), 'server.pid')
|
||
|
|
||
|
pid = read_pid_file(pid_file)
|
||
|
if pid and is_java_process_running(pid):
|
||
|
logging.info(f"Script {script_name} is already running with PID {pid}.")
|
||
|
results.append({
|
||
|
"script": path,
|
||
|
"params": params,
|
||
|
"status": "already running",
|
||
|
"pid": pid
|
||
|
})
|
||
|
continue
|
||
|
|
||
|
try:
|
||
|
logging.info(f"Starting script: {' '.join(['python', path] + params)}")
|
||
|
process = subprocess.Popen(['python', path] + params, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||
|
psutil_process = psutil.Process(process.pid)
|
||
|
logging.info(f"Started {script_name} with PID: {psutil_process.pid}")
|
||
|
results.append({
|
||
|
"script": path,
|
||
|
"params": params,
|
||
|
"pid": psutil_process.pid
|
||
|
})
|
||
|
except Exception as e:
|
||
|
logging.error(f"Error starting script {path}: {e}")
|
||
|
results.append({
|
||
|
"script": path,
|
||
|
"params": params,
|
||
|
"error": str(e)
|
||
|
})
|
||
|
logging.info(f"{results =}")
|
||
|
"""
|
||
|
current_pid = 8196
|
||
|
try:
|
||
|
subprocess.run(['taskkill', '/F', '/PID', str(current_pid)], check=True)
|
||
|
print(f"Process with PID {current_pid} has been terminated.")
|
||
|
except subprocess.CalledProcessError as e:
|
||
|
print(f"Failed to terminate process with PID {current_pid}. Error: {e}")
|
||
|
"""
|