Skip to content

systemd — это система инициализации и менеджер служб для операционных систем Linux, который управляет запуском и контролем системных процессов и служб.


Чтобы запустить приложение Bun как демон с помощью systemd, вам нужно создать файл службы в /lib/systemd/system/.

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

Вот типичный файл службы, который запускает приложение при запуске системы. Вы можете использовать его как шаблон для вашей собственной службы. Замените YOUR_USER на имя пользователя, от которого вы хотите запускать приложение. Для запуска от имени root замените YOUR_USER на root, хотя это обычно не рекомендуется по соображениям безопасности.

Обратитесь к документации systemd для получения дополнительной информации о каждой настройке.

ini
[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.

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

После настройки файла службы вы можете включить службу. После включения она будет запускаться автоматически при перезагрузке. Для этого требуются права sudo.

bash
systemctl enable my-app

Чтобы запустить службу без перезагрузки, вы можете вручную запустить её.

bash
systemctl start my-app

Проверьте статус вашего приложения с помощью systemctl status. Если вы успешно запустили приложение, вы должны увидеть что-то вроде этого:

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

Чтобы обновить службу, отредактируйте содержимое файла службы, затем перезагрузите демон.

bash
systemctl daemon-reload

Для получения полного руководства по конфигурации единицы службы вы можете проверить эту страницу. Или обратитесь к этой шпаргалке распространённых команд:

bash
systemctl daemon-reload # сообщить systemd, что некоторые файлы были изменены
systemctl enable my-app # включить приложение (для автоматического запуска)
systemctl disable my-app # отключить приложение (отключает автозапуск)
systemctl start my-app # запустить приложение, если оно остановлено
systemctl stop my-app # остановить приложение
systemctl restart my-app # перезапустить приложение

Bun от www.bunjs.com.cn