Created
December 22, 2019 11:38
-
-
Save edg-l/3901de0fcb60123295eaf3d723a3a5ca to your computer and use it in GitHub Desktop.
Teeworlds server management script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import os | |
import sys | |
import subprocess | |
import signal | |
import time | |
from typing import List | |
basedir = os.path.dirname(os.path.realpath(__file__)) | |
files = os.listdir(basedir) | |
cfgfiles = [] | |
for file in files: | |
if os.path.isfile(file) and file.split(".")[-1] == "cfg": | |
cfgfiles.append(file) | |
class Server: | |
def __init__(self, file: str): | |
self.file = file | |
self.process = None | |
def start(self): | |
with open(f'{self.file}.log', 'w') as logfile: | |
print(f"Started server {self.file}") | |
self.process = subprocess.Popen(['./teeworlds_srv', '-f', self.file], cwd=basedir, stdout=logfile, stderr=logfile) | |
servers: List[Server] = [] | |
def stop_servers(signum, frame): | |
for server in servers: | |
if server.process: | |
server.process.terminate() | |
sys.exit() | |
signal.signal(signal.SIGINT, stop_servers) | |
signal.signal(signal.SIGTERM, stop_servers) | |
for file in cfgfiles: | |
server = Server(file) | |
server.start() | |
servers.append(server) | |
while True: | |
for server in servers: | |
if server.process is not None and server.process.poll() is not None: | |
server.start() | |
time.sleep(5) | |
# TODO: Add a thread to accept commands to servers. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment