diff --git a/config.py b/config.py index cfdd9b6..34ba692 100644 --- a/config.py +++ b/config.py @@ -4,7 +4,7 @@ from dotenv import dotenv_values class Config: data = dotenv_values() MINECRAFTD_PASSWORD: str | None = data.get("MINECRAFTD_PASSWORD") - START_COMMAND: str = data.get("START_COMMAND") or "python proc.py" + START_COMMAND_FILE: str = data.get("START_COMMAND_FILE") or "start.sh" SERVER_HOST: str = data.get("SERVER_HOST") or "localhost" SERVER_PORT: int = int(data.get("SERVER_PORT") or 25565) SERVER_RCON_PORT: int = int(data.get("SERVER_RCON_PORT") or 25575) diff --git a/controllers.py b/controllers.py index 1156131..03ef9ef 100644 --- a/controllers.py +++ b/controllers.py @@ -1,21 +1,24 @@ import shlex from collections import deque from pathlib import Path -from subprocess import PIPE, Popen +from subprocess import Popen from threading import Lock from time import sleep from typing import Literal +from mcrcon import MCRcon +from mcstatus import JavaServer + from classes import ProcessStatus, ServerStatus from config import Config from logs import logger -from mcrcon import MCRcon -from mcstatus import JavaServer class ProcessController: def __init__(self): - self.start_command: list[str] = shlex.split(Config.START_COMMAND) + self.start_command: list[str] = shlex.split( + Path(Config.START_COMMAND_FILE).read_text() + ) self.process: Popen | None = None self.last_status: Literal[ProcessStatus.STOPPED, ProcessStatus.CRASHED] = ( ProcessStatus.STOPPED @@ -36,8 +39,10 @@ class ProcessController: self.process = Popen( self.start_command, - stdout=PIPE, - stderr=PIPE, + stdout=None, + stderr=None, + stdin=None, + start_new_session=True, ) logger.info( "ProcessController.start() - Started process with PID: %s",