5A景区网站建设

如何让 pnpm run start 保持后台运行?

Umami 手动安装(非 Docker)后,使用 pnpm run start 启动服务会占用终端,且关闭终端后服务会停止。
下面提供 4 种可靠方法,让 Umami 后台运行 + 开机自启,适用于 Ubuntu/Debian 服务器。

推荐方案对比

方法
难度
后台运行
开机自启
推荐指数
1. systemd 服务
★★☆☆☆
Yes
Yes
⭐
2. pm2 进程守护
★★☆☆☆
Yes
Yes
3. screen / tmux
★☆☆☆☆
Yes
No
4. nohup
★☆☆☆☆
Yes
No

方法一:使用 systemd(最推荐,企业级)

自动后台运行 + 开机自启 + 日志管理 + 崩溃重启

1. 进入 Umami 项目目录

bash
cd /path/to/umami
# 例如:cd ~/umami

2. 创建 systemd 服务文件

bash
sudo nano /etc/systemd/system/umami.service

3. 粘贴以下内容(修改路径)

ini
[Unit]
Description=Umami Analytics
After=network.target

[Service]
Type=simple
User=www-data          # 推荐使用 www-data 或你的用户名
WorkingDirectory=/home/youruser/umami   # 修改为你的 umami 目录
Environment=NODE_ENV=production
Environment=DATABASE_URL=postgresql://umami:yourpassword@localhost:5432/umami
ExecStart=/usr/bin/pnpm run start
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
重点修改
  • WorkingDirectory → 你的 umami 目录
  • User → 你的用户名或 www-data
  • DATABASE_URL → 你的数据库连接字符串

4. 启用并启动服务

bash
# 重新加载 systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start umami

# 开机自启
sudo systemctl enable umami

5. 查看状态 & 日志

bash
# 查看状态
sudo systemctl status umami

# 查看实时日志
journalctl -u umami -f

# 重启服务
sudo systemctl restart umami

方法二:使用 pm2(Node.js 专用,简单好用)1. 全局安装 pm2

bash
pnpm add -g pm2

2. 启动 Umami

bash
cd /path/to/umami
pm2 start "pnpm run start" --name umami

3. 设置开机自启

bash
# 保存当前进程列表
pm2 save

# 生成开机启动脚本
pm2 startup
# 会输出一行命令,复制执行,例如:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u youruser --hp /home/youruser

4. 常用命令

bash
pm2 status          # 查看状态
pm2 logs umami      # 查看日志
pm2 restart umami   # 重启
pm2 stop umami      # 停止
pm2 delete umami    # 删除

方法三:使用 screen(临时调试用)

bash
# 安装 screen
sudo apt install screen -y

# 启动一个会话
screen -S umami

# 在 screen 中运行
cd /path/to/umami
pnpm run start

# 按 Ctrl+A 然后 D 脱离(后台运行)

# 重新进入
screen -r umami
缺点:服务器重启后需手动重启

方法四:使用 nohup(最简单)

bash
cd /path/to/umami
nohup pnpm run start > umami.log 2>&1 &
查看日志:tail -f umami.log
查找进程:ps aux | grep pnpm
杀死进程:kill PID
缺点:无开机自启,日志管理差

验证服务是否运行

bash
# 检查端口 3000 是否监听
netstat -tlnp | grep 3000
# 或
ss -tlnp | grep 3000

浏览器访问:http://你的IP:3000


推荐组合(生产环境)

bash
# 1. 用 systemd 管理服务(后台 + 开机自启)
# 2. 用 Nginx 反向代理 + HTTPS
# 3. 用 pm2 监控(可选)

一键生成 systemd 服务脚本

bash
#!/bin/bash
UMAMI_PATH="/home/$(whoami)/umami"  # 修改路径
DB_URL="postgresql://umami:yourpassword@localhost:5432/umami"  # 修改

sudo tee /etc/systemd/system/umami.service > /dev/null << EOF
[Unit]
Description=Umami Analytics
After=network.target

[Service]
Type=simple
User=$(whoami)
WorkingDirectory=$UMAMI_PATH
Environment=NODE_ENV=production
Environment=DATABASE_URL=$DB_URL
ExecStart=/usr/bin/pnpm run start
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now umami
echo "Umami 已设置为后台运行 + 开机自启"
保存为 setup-umami-service.shchmod +x./setup-umami-service.sh

总结

你想怎么做
推荐命令
永久后台 + 开机自启
systemd
快速部署 + 监控
pm2
临时测试
screennohup
退出移动版