Skip to content

systemd è un sistema di init e gestore di servizi per sistemi operativi Linux che gestisce l'avvio e il controllo dei processi e servizi di sistema.


Per eseguire un'applicazione Bun come demone usando systemd, dovrai creare un file di servizio in /lib/systemd/system/.

sh
cd /lib/systemd/system
touch my-app.service

Ecco un tipico file di servizio che esegue un'applicazione all'avvio del sistema. Puoi usarlo come template per il tuo servizio. Sostituisci YOUR_USER con il nome dell'utente con cui vuoi eseguire l'applicazione. Per eseguire come root, sostituisci YOUR_USER con root, anche se questo generalmente non è raccomandato per motivi di sicurezza.

Consulta la documentazione di systemd per ulteriori informazioni su ciascuna impostazione.

ini
[Unit]
# descrivi l'app
Description=My App
# avvia l'app dopo che la rete è disponibile
After=network.target

[Service]
# di solito userai 'simple'
# uno tra https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# quale utente usare per avviare l'app
User=YOUR_USER
# percorso della directory root della tua applicazione
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# il comando per avviare l'app
# richiede percorsi assoluti
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# politica di riavvio
# uno tra {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always

[Install]
# avvia l'app automaticamente
WantedBy=multi-user.target

Se la tua applicazione avvia un webserver, tieni presente che gli utenti non-root non sono in grado di ascoltare sulle porte 80 o 443 per impostazione predefinita. Per consentire permanentemente a Bun di ascoltare su queste porte quando eseguito da un utente non-root, usa il seguente comando. Questo passaggio non è necessario quando si esegue come root.

bash
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bun

Con il file di servizio configurato, ora puoi abilitare il servizio. Una volta abilitato, si avvierà automaticamente al riavvio. Questo richiede permessi sudo.

bash
systemctl enable my-app

Per avviare il servizio senza riavviare, puoi manualmente avviarlo.

bash
systemctl start my-app

Controlla lo stato della tua applicazione con systemctl status. Se hai avviato correttamente la tua app, dovresti vedere qualcosa del genere:

bash
systemctl status my-app
txt
● my-app.service - My App
     Loaded: loaded (/lib/systemd/system/my-app.service; enabled; preset: enabled)
     Active: active (running) since Thu 2023-10-12 11:34:08 UTC; 1h 8min ago
   Main PID: 309641 (bun)
      Tasks: 3 (limit: 503)
     Memory: 40.9M
        CPU: 1.093s
     CGroup: /system.slice/my-app.service
             └─309641 /home/YOUR_USER/.bun/bin/bun run /home/YOUR_USER/application/index.ts

Per aggiornare il servizio, modifica il contenuto del file di servizio, poi ricarica il daemon.

bash
systemctl daemon-reload

Per una guida completa sulla configurazione dell'unità di servizio, puoi consultare questa pagina. Oppure consulta questo cheatsheet dei comandi comuni:

bash
systemctl daemon-reload # informa systemd che alcuni file sono stati modificati
systemctl enable my-app # abilita l'app (per consentire l'avvio automatico)
systemctl disable my-app # disabilita l'app (disattiva l'avvio automatico)
systemctl start my-app # avvia l'app se è ferma
systemctl stop my-app # ferma l'app
systemctl restart my-app # riavvia l'app

Bun a cura di www.bunjs.com.cn