# systemd-Unit für den kopflosen Linux-Betrieb (--headless, Stufe L2 der Linux-Portierung). # Der Deploymentcenter-Installer legt selbst keinen Dienst an (siehe SETUP_INTEGRATION_GUIDE §7, # "Dienstregistrierung fehlt") - diese Datei ist unser Ersatz dafür. # # Einrichtung: # sudo cp deploy/polytrader.service /etc/systemd/system/polytrader.service # sudo systemctl daemon-reload # sudo systemctl enable --now polytrader # # WICHTIG (D-11 aus dem Umsetzungsplan): server_settings.xml wird relativ zum Arbeitsverzeichnis # geladen, master.key dagegen relativ zur ausführbaren Datei (AppContext.BaseDirectory). Beides # fällt nur zusammen, wenn WorkingDirectory exakt das Installationsverzeichnis ist - deshalb hier # ausdrücklich gesetzt statt dem systemd-Standard (Root des Dienstbenutzers) überlassen. Eine # abweichende WorkingDirectory liest server_settings.xml aus dem falschen Ordner, ohne dass das # irgendwo auffällt (ServerSettings.Load() legt bei fehlender Datei kommentarlos eine neue an). [Unit] Description=PolyTrader (Trading- und Analyse-Suite fuer Polymarket) After=network-online.target mysql.service Wants=network-online.target [Service] Type=simple # Anpassen: Installationsverzeichnis und Dienstkonto. Nicht als root betreiben - das # Installationsverzeichnis (inkl. master.key, server_settings.xml, data.db) gehört diesem Konto. User=polytrader Group=polytrader WorkingDirectory=/opt/polytrader ExecStart=/opt/polytrader/PolyTrader.App.Avalonia --headless Restart=on-failure RestartSec=10 # Absturz vom sauberen Beenden unterscheiden: SIGTERM statt SIGKILL, mit Frist fuer den # geordneten Shutdown-Pfad (offene Positionen, Watchdog-"stopped_graceful", DB-Flush). KillSignal=SIGTERM TimeoutStopSec=45 [Install] WantedBy=multi-user.target