systemd ist ein Init-System und Dienstmanager für Linux-Betriebssysteme, der den Start und die Steuerung von Systemprozessen und -diensten verwaltet.
Um eine Bun-Anwendung als Daemon mit systemd auszuführen, müssen Sie eine Dienstdatei in /lib/systemd/system/ erstellen.
cd /lib/systemd/system
touch my-app.serviceHier ist eine typische Dienstdatei, die eine Anwendung beim Systemstart ausführt. Sie können diese als Vorlage für Ihren eigenen Dienst verwenden. Ersetzen Sie YOUR_USER durch den Namen des Benutzers, als den Sie die Anwendung ausführen möchten. Um als root auszuführen, ersetzen Sie YOUR_USER durch root, obwohl dies aus Sicherheitsgründen im Allgemeinen nicht empfohlen wird.
Weitere Informationen zu jeder Einstellung finden Sie in der systemd-Dokumentation.
[Unit]
# describe the app
Description=My App
# start the app after the network is available
After=network.target
[Service]
# usually you'll use 'simple'
# one of https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# which user to use when starting the app
User=YOUR_USER
# path to your application's root directory
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# the command to start the app
# requires absolute paths
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# restart policy
# one of {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always
[Install]
# start the app automatically
WantedBy=multi-user.targetWenn Ihre Anwendung einen Webserver startet, beachten Sie, dass Nicht-root-Benutzer standardmäßig nicht an den Ports 80 oder 443 lauschen können. Um Bun dauerhaft zu ermöglichen, an diesen Ports zu lauschen, wenn es von einem Nicht-root-Benutzer ausgeführt wird, verwenden Sie den folgenden Befehl. Dieser Schritt ist nicht erforderlich, wenn Sie als root ausführen.
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bunMit der konfigurierten Dienstdatei können Sie den Dienst jetzt aktivieren. Sobald aktiviert, startet er automatisch beim Neustart. Dies erfordert sudo-Berechtigungen.
systemctl enable my-appUm den Dienst ohne Neustart zu starten, können Sie ihn manuell starten.
systemctl start my-appÜberprüfen Sie den Status Ihrer Anwendung mit systemctl status. Wenn Sie Ihre App erfolgreich gestartet haben, sollten Sie Folgendes sehen:
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.tsUm den Dienst zu aktualisieren, bearbeiten Sie den Inhalt der Dienstdatei und laden Sie den Daemon neu.
systemctl daemon-reloadEine vollständige Anleitung zur Konfiguration der Diensteinheit finden Sie auf dieser Seite. Oder verwenden Sie diese Befehlsübersicht für gängige Befehle:
systemctl daemon-reload # tell systemd that some files got changed
systemctl enable my-app # enable the app (to allow auto-start)
systemctl disable my-app # disable the app (turns off auto-start)
systemctl start my-app # start the app if is stopped
systemctl stop my-app # stop the app
systemctl restart my-app # restart the app