Implantação como serviço

Desde v1.0.0-rc14 o mesmo binário openads_serverd funciona também como serviço nativo do SO nas três plataformas. O path de graceful shutdown é compartilhado com o handler de Ctrl+C interativo, então um stop limpo executa o mesmo cleanup (flush de tabelas abertas, drenar frames wire em voo, liberar locks).

Windows — serviço SCM

O binário se autorregistra via Service Control Manager:

:: Registrar (SERVICE_AUTO_START no boot). Flags após
:: --install-service ficam embutidas no binPath registrado.
openads_serverd --install-service ^
    --port 6262 ^
    --http-port 6263 ^
    --data C:\app\dados

:: Iniciar
sc start openads_serverd

:: Parar / remover
sc stop  openads_serverd
openads_serverd --uninstall-service

Execute cmd elevado para install / uninstall.

O serviço roda como SERVICE_WIN32_OWN_PROCESS. O handler respeita SERVICE_CONTROL_STOP e SERVICE_CONTROL_SHUTDOWN. Rodar o binário com --service fora do SCM imprime uma explicação em vez de travar.

Linux — systemd

scripts/openads-serverd.service:

[Unit]
Description=OpenADS Server Daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=openads
ExecStart=/usr/local/bin/openads_serverd \
    --port 6262 --http-port 6263 \
    --data /var/lib/openads
Restart=on-failure

# Hardening
ProtectSystem=strict
NoNewPrivileges=yes
PrivateTmp=yes
RestrictAddressFamilies=AF_INET AF_INET6
ReadWritePaths=/var/lib/openads

[Install]
WantedBy=multi-user.target

Instalação + ativação:

sudo useradd --system --no-create-home openads
sudo cp scripts/openads-serverd.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now openads-serverd
sudo systemctl status openads-serverd

macOS — launchd

scripts/com.openads.serverd.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.openads.serverd</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/openads_serverd</string>
    <string>--port</string><string>6262</string>
    <string>--http-port</string><string>6263</string>
    <string>--data</string><string>/usr/local/var/openads</string>
  </array>
  <key>KeepAlive</key><true/>
  <key>RunAtLoad</key><true/>
  <key>StandardOutPath</key>
  <string>/var/log/openads-serverd.out.log</string>
  <key>StandardErrorPath</key>
  <string>/var/log/openads-serverd.err.log</string>
</dict>
</plist>

Em todo o sistema (no boot):

sudo cp scripts/com.openads.serverd.plist /Library/LaunchDaemons/
sudo launchctl load /Library/LaunchDaemons/com.openads.serverd.plist

Por usuário (no login):

cp scripts/com.openads.serverd.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.openads.serverd.plist

Health check

curl http://localhost:6263/api/health
# {"status":"ok","mode":"remote-server","version":"1.0.0-rc23", ... }

O campo mode é o que o badge de modo do Studio usa (rc10).


This site uses Just the Docs, a documentation theme for Jekyll.