Skip to main content

Specifikace služby Systemd

ID jednotky služby pochází z config.ini.system_id:

{
"system_id": "<system_id>"
}

Výsledná systémová služba musí být:

<system_id>.service

Uložená v instalačním adresáři aplikace:

/usr/local/<app_id>/init.d/<system_id>.service

Standardní soubor služby:

Standardní soubor služby (se zesílením zabezpečení):

[Unit]
Description=<service_description>
After=network.target
StartLimitBurst=5
StartLimitIntervalSec=60

[Service]
Type=simple
User=<appid>
Group=<appid>
WorkingDirectory=/usr/local/<appid>
ExecStart=/usr/local/<appid>/bin/<binary_name>
EnvironmentFile=/usr/local/<appid>/<appid>.env
TimeoutStartSec=30
TimeoutStopSec=10
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/<appid> /var/log/<appid>
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Referenční příručka direktiv systemd:

DirektivaHodnotaPovinnáPopis
User<appid>✅ AnoSpusťte službu jako vyhrazeného uživatele bez oprávnění root
Group<appid>✅ AnoSpusťte službu s vyhrazenou skupinou
WorkingDirectory/usr/local/<appid>✅ AnoPracovní adresář služby
NoNewPrivilegestrue✅ AnoZabraňuje eskalaci oprávnění
ProtectSystemstrict✅ AnoPřipojí /usr, /boot, /etc jako pouze pro čtení
ProtectHometrue✅ AnoSkryje adresář /home
TimeoutStartSec30✅ AnoČasový limit spuštění služby (sekundy)
TimeoutStopSec10✅ AnoČasový limit řádného zastavení (sekundy)
AmbientCapabilitiesCAP_NET_BIND_SERVICEPodmíněněPotřebné pouze při vázání na porty nižší než 1024
ReadWritePaths/var/lib/<appid> /var/log/<appid>✅ AnoVýslovně deklarujte zapisovatelné cesty
LimitNOFILE65536DoporučenoLimit počtu otevřených souborů
StartLimitBurst5DoporučenoMaximální počet restartů v rámci intervalu
StartLimitIntervalSec60DoporučenoInterval limitu restartů (sekundy)
Důležité

Konfigurační soubor jednotky služby nesmí konfigurovat parametry Restart a RestartSec. Životní cyklus spuštění, zastavení a restartu aplikace je jednotně řízen App Center TOS. Automatické strategie restartu nakonfigurované vývojářem mohou kolidovat s logikou správy platformy a vést k nekonzistentním stavům aplikace. StartLimitBurst a StartLimitIntervalSec jsou zachovány a nejsou ovlivněny.