systemd — это система инициализации и менеджер служб для операционных систем Linux, который управляет запуском и контролем системных процессов и служб.
Чтобы запустить приложение Bun как демон с помощью systemd, вам нужно создать файл службы в /lib/systemd/system/.
cd /lib/systemd/system
touch my-app.serviceВот типичный файл службы, который запускает приложение при запуске системы. Вы можете использовать его как шаблон для вашей собственной службы. Замените YOUR_USER на имя пользователя, от которого вы хотите запускать приложение. Для запуска от имени root замените YOUR_USER на root, хотя это обычно не рекомендуется по соображениям безопасности.
Обратитесь к документации systemd для получения дополнительной информации о каждой настройке.
[Unit]
# описание приложения
Description=My App
# запуск приложения после доступности сети
After=network.target
[Service]
# обычно используется 'simple'
# один из https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# какой пользователь используется для запуска приложения
User=YOUR_USER
# путь к корневой директории вашего приложения
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# команда для запуска приложения
# требуются абсолютные пути
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# политика перезапуска
# один из {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always
[Install]
# запуск приложения автоматически
WantedBy=multi-user.targetЕсли ваше приложение запускает веб-сервер, обратите внимание, что пользователи, не являющиеся root, по умолчанию не могут прослушивать порты 80 или 443. Чтобы навсегда разрешить Bun прослушивать эти порты при выполнении пользователем, не являющимся root, используйте следующую команду. Этот шаг не требуется при запуске от имени root.
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bunПосле настройки файла службы вы можете включить службу. После включения она будет запускаться автоматически при перезагрузке. Для этого требуются права sudo.
systemctl enable my-appЧтобы запустить службу без перезагрузки, вы можете вручную запустить её.
systemctl start my-appПроверьте статус вашего приложения с помощью systemctl status. Если вы успешно запустили приложение, вы должны увидеть что-то вроде этого:
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.tsЧтобы обновить службу, отредактируйте содержимое файла службы, затем перезагрузите демон.
systemctl daemon-reloadДля получения полного руководства по конфигурации единицы службы вы можете проверить эту страницу. Или обратитесь к этой шпаргалке распространённых команд:
systemctl daemon-reload # сообщить systemd, что некоторые файлы были изменены
systemctl enable my-app # включить приложение (для автоматического запуска)
systemctl disable my-app # отключить приложение (отключает автозапуск)
systemctl start my-app # запустить приложение, если оно остановлено
systemctl stop my-app # остановить приложение
systemctl restart my-app # перезапустить приложение