systemd es un sistema de inicio y administrador de servicios para sistemas operativos Linux que gestiona el arranque y control de procesos y servicios del sistema.
Para ejecutar una aplicación Bun como un demonio usando systemd, necesitarás crear un archivo de servicio en /lib/systemd/system/.
cd /lib/systemd/system
touch my-app.serviceAquí hay un archivo de servicio típico que ejecuta una aplicación al inicio del sistema. Puedes usarlo como plantilla para tu propio servicio. Reemplaza YOUR_USER con el nombre del usuario con el que quieres ejecutar la aplicación. Para ejecutar como root, reemplaza YOUR_USER con root, aunque esto generalmente no se recomienda por razones de seguridad.
Consulta la documentación de systemd para más información sobre cada configuración.
[Unit]
# describe la aplicación
Description=My App
# inicia la aplicación después de que la red esté disponible
After=network.target
[Service]
# usualmente usarás 'simple'
# uno de https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# qué usuario usar al iniciar la aplicación
User=YOUR_USER
# ruta al directorio raíz de tu aplicación
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# el comando para iniciar la aplicación
# requiere rutas absolutas
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# política de reinicio
# uno de {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always
[Install]
# inicia la aplicación automáticamente
WantedBy=multi-user.targetSi tu aplicación inicia un servidor web, ten en cuenta que los usuarios que no son root no pueden escuchar en los puertos 80 o 443 por defecto. Para permitir permanentemente que Bun escuche en estos puertos cuando es ejecutado por un usuario que no es root, usa el siguiente comando. Este paso no es necesario cuando se ejecuta como root.
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bunCon el archivo de servicio configurado, ahora puedes habilitar el servicio. Una vez habilitado, se iniciará automáticamente al reiniciar. Esto requiere permisos sudo.
systemctl enable my-appPara iniciar el servicio sin reiniciar, puedes iniciarlo manualmente.
systemctl start my-appVerifica el estado de tu aplicación con systemctl status. Si has iniciado tu aplicación correctamente, deberías ver algo como esto:
systemctl status my-app● 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.tsPara actualizar el servicio, edita el contenido del archivo de servicio, luego recarga el daemon.
systemctl daemon-reloadPara una guía completa sobre la configuración de la unidad de servicio, puedes consultar esta página. O consulta esta hoja de referencia de comandos comunes:
systemctl daemon-reload # indica a systemd que algunos archivos fueron cambiados
systemctl enable my-app # habilita la aplicación (para permitir auto-inicio)
systemctl disable my-app # deshabilita la aplicación (desactiva el auto-inicio)
systemctl start my-app # inicia la aplicación si está detenida
systemctl stop my-app # detiene la aplicación
systemctl restart my-app # reinicia la aplicación