systemd 是一个用于 Linux 操作系统的初始化系统和服务管理器,负责管理系统进程和服务的启动和控制。
要使用 systemd 以守护进程方式运行 Bun 应用,你需要在 /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如果你的应用启动 Web 服务器,请注意,默认情况下非 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-apptxt
● 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 # 重启应用