# # systemd-Unit für den kopflosen IBKRTrader-Dienst. # # sudo cp deploy/ibkrtrader.service /etc/systemd/system/ # sudo systemctl daemon-reload # sudo systemctl enable --now ibkrtrader # journalctl -u ibkrtrader -f # # Voraussetzungen auf dem Host: # - .NET-10-Runtime (dotnet-runtime-10.0) # - libicu → PFLICHT. Ohne ICU fällt die Auflösung von Windows-Zeitzonen-IDs aus und die # feste de-DE-Formatierung im PDF-Export kippt auf invariant. Beides würde # lautlos falsche Ausgaben erzeugen, nicht etwa einen Fehler. # - fonts-dejavu-core → nur für den PDF-Export des Accounting-Moduls. # - mariadb-client → nur für den BackupWorker (mariadb-dump). # [Unit] Description=IBKRTrader (kopfloser Handelsdienst) Documentation=file:///opt/ibkrtrader/docs/ARCHITECTURE.md After=network-online.target Wants=network-online.target [Service] Type=notify NotifyAccess=all User=ibkrtrader Group=ibkrtrader WorkingDirectory=/opt/ibkrtrader ExecStart=/opt/ibkrtrader/IBKRTrader.Daemon # Ablageorte. Ohne diese Variablen weicht die Anwendung selbst auf die FHS-Pfade aus, sobald # /opt/ibkrtrader nicht beschreibbar ist – ausdrücklich gesetzt ist es aber nachvollziehbarer. Environment=IBKRTRADER_CONFIG_DIR=/etc/ibkrtrader Environment=IBKRTRADER_DATA_DIR=/var/lib/ibkrtrader Environment=IBKRTRADER_LOG_DIR=/var/log/ibkrtrader # Der Master-Key gehört NICHT in diese Datei (sie ist für alle lesbar). Entweder als Datei # /etc/ibkrtrader/master.key mit chmod 600, oder über eine EnvironmentFile mit 600: # EnvironmentFile=/etc/ibkrtrader/secrets.env Environment=DOTNET_EnableDiagnostics=0 # Geordnetes Herunterfahren: SIGTERM, dann Zeit für offene Broker-Anfragen und den Modul-Stopp. KillSignal=SIGTERM TimeoutStopSec=60 Restart=on-failure RestartSec=15 # Absicherung. Der Dienst braucht nur seine drei Verzeichnisse beschreibbar. NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/var/lib/ibkrtrader /var/log/ibkrtrader ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictSUIDSGID=true RestrictNamespaces=true LockPersonality=true [Install] WantedBy=multi-user.target