diff --git a/main.spec b/main.spec index 6a8a32a..adfa183 100644 --- a/main.spec +++ b/main.spec @@ -26,7 +26,7 @@ a = Analysis( runtime_hooks=[], excludes=[], noarchive=False, - optimize=0, + optimize=1, # fyi: optim level 2 breaks on windows ) pyz = PYZ(a.pure) @@ -40,7 +40,7 @@ if platform.system() == 'Darwin': # macOS name=APP_NAME, debug=False, bootloader_ignore_signals=False, - strip=False, + strip=True, upx=True, console=False, disable_windowed_traceback=False, @@ -87,7 +87,7 @@ elif platform.system() == 'Windows': name=APP_NAME, debug=False, bootloader_ignore_signals=False, - strip=False, + strip=True, upx=True, console=False, disable_windowed_traceback=False, @@ -108,7 +108,7 @@ else: # linux name=APP_NAME, debug=False, bootloader_ignore_signals=False, - strip=False, + strip=True, upx=True, console=False, disable_windowed_traceback=False, diff --git a/src/init.py b/src/init.py index 6abdad4..82bdfa3 100644 --- a/src/init.py +++ b/src/init.py @@ -15,6 +15,7 @@ from src.render_queue import RenderQueue from src.utilities.config import Config from src.utilities.misc_helper import system_safe_path, current_system_cpu, current_system_os, current_system_os_version from src.utilities.zeroconf_server import ZeroconfServer +from version import APP_NAME logger = logging.getLogger() @@ -29,16 +30,29 @@ def run(server_only=False) -> int: int: The exit status code. """ + def existing_process(process_name): + import psutil + for proc in psutil.process_iter(['pid', 'name']): + if proc.info['name'].lower() == process_name.lower() and proc.info['pid'] != os.getpid(): + return proc + return None + # setup logging logging.basicConfig(format='%(asctime)s: %(levelname)s: %(module)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=Config.server_log_level.upper()) logging.getLogger("requests").setLevel(logging.WARNING) # suppress noisy requests/urllib3 logging logging.getLogger("urllib3").setLevel(logging.WARNING) + # check for existing instance + existing_proc = existing_process(APP_NAME) + if existing_proc: + logger.fatal(f"Another instance of {APP_NAME} is already running (pid: {existing_proc.pid})") + sys.exit(1) + # Setup logging for console ui buffer_handler = __setup_buffer_handler() if not server_only else None - logger.info(f"Starting Zordon Render Server") + logger.info(f"Starting {APP_NAME} Render Server") return_code = 0 try: # Load Config YAML @@ -77,13 +91,13 @@ def run(server_only=False) -> int: api_server.start() # start zeroconf server - ZeroconfServer.configure("_zordon._tcp.local.", local_hostname, Config.port_number) + ZeroconfServer.configure(f"_{APP_NAME.lower()}._tcp.local.", local_hostname, Config.port_number) ZeroconfServer.properties = {'system_cpu': current_system_cpu(), 'system_cpu_cores': multiprocessing.cpu_count(), 'system_os': current_system_os(), 'system_os_version': current_system_os_version()} ZeroconfServer.start() - logger.info(f"Zordon Render Server started - Hostname: {local_hostname}") + logger.info(f"{APP_NAME} Render Server started - Hostname: {local_hostname}") RenderQueue.start() # Start evaluating the render queue # start in gui or server only (cli) mode @@ -100,13 +114,13 @@ def run(server_only=False) -> int: return_code = 1 finally: # shut down gracefully - logger.info(f"Zordon Render Server is preparing to shut down") + logger.info(f"{APP_NAME} Render Server is preparing to shut down") try: RenderQueue.prepare_for_shutdown() except Exception as e: logger.exception(f"Exception during prepare for shutdown: {e}") ZeroconfServer.stop() - logger.info(f"Zordon Render Server has shut down") + logger.info(f"{APP_NAME} Render Server has shut down") return sys.exit(return_code)