systemd é um sistema de inicialização e gerenciador de serviços para sistemas operacionais Linux que gerencia a inicialização e controle de processos e serviços do sistema.
Para executar uma aplicação Bun como daemon usando systemd, você precisará criar um arquivo de serviço em /lib/systemd/system/.
cd /lib/systemd/system
touch my-app.serviceAqui está um arquivo de serviço típico que executa uma aplicação na inicialização do sistema. Você pode usá-lo como modelo para seu próprio serviço. Substitua YOUR_USER pelo nome do usuário que você deseja usar para executar a aplicação. Para executar como root, substitua YOUR_USER por root, embora isso geralmente não seja recomendado por motivos de segurança.
Consulte a documentação do systemd para mais informações sobre cada configuração.
[Unit]
# descreva a aplicação
Description=My App
# inicie a aplicação após a rede estar disponível
After=network.target
[Service]
# geralmente você usará 'simple'
# um de https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# qual usuário usar ao iniciar a aplicação
User=YOUR_USER
# caminho para o diretório raiz da sua aplicação
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# o comando para iniciar a aplicação
# requer caminhos absolutos
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# política de reinicialização
# um de {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always
[Install]
# inicie a aplicação automaticamente
WantedBy=multi-user.targetSe sua aplicação inicia um servidor web, observe que usuários não-root não podem escutar nas portas 80 ou 443 por padrão. Para permitir permanentemente que o Bun escute nessas portas quando executado por um usuário não-root, use o seguinte comando. Esta etapa não é necessária ao executar como root.
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bunCom o arquivo de serviço configurado, você pode agora habilitar o serviço. Uma vez habilitado, ele será iniciado automaticamente na reinicialização. Isso requer permissões sudo.
systemctl enable my-appPara iniciar o serviço sem reinicializar, você pode iniciá-lo manualmente.
systemctl start my-appVerifique o status da sua aplicação com systemctl status. Se você iniciou sua aplicação com sucesso, deverá ver algo como isto:
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 atualizar o serviço, edite o conteúdo do arquivo de serviço e recarregue o daemon.
systemctl daemon-reloadPara um guia completo sobre a configuração da unidade de serviço, você pode verificar esta página. Ou consulte esta folha de dicas de comandos comuns:
systemctl daemon-reload # informa ao systemd que alguns arquivos foram alterados
systemctl enable my-app # habilita a aplicação (permite inicialização automática)
systemctl disable my-app # desabilita a aplicação (desativa inicialização automática)
systemctl start my-app # inicia a aplicação se estiver parada
systemctl stop my-app # para a aplicação
systemctl restart my-app # reinicia a aplicação