Mac后端服务设置

15 阅读2分钟

Mac 本地服务常驻运行配置总结(pm2 + caffeinate)

目标

  • 本地 Go / Python 服务长期运行
  • 关闭终端不影响服务
  • 避免系统休眠导致服务中断
  • 服务可统一管理、自动重启、可查看日志

一、核心工具

工具用途
pm2后台进程管理、自动重启、多服务托管
caffeinate防止 macOS 睡眠
Go build编译 Go 二进制,提高稳定性
ezpm2gui可视化管理PM2

二、Go 服务:从 go run 升级为「构建后运行」

1. 构建二进制

mkdir -p bin
go build -o bin/server cmd/server/*.go

2. 直接运行测试

./bin/server

3. 优势

  • 启动更快
  • 避免运行时编译失败
  • 更适合 pm2 守护
  • 更接近生产部署模式

三、使用 pm2 管理多个服务(Go + Python)

1. 安装 pm2

npm install -g pm2

2. 创建 ecosystem 配置

pm2 ecosystem

3. 示例 ecosystem.config.js

module.exports = {
  apps: [
    {
      name: "python-api",
      script: "./scripts/start.sh",
      autorestart: true,
      restart_delay: 3000
    },

    {
      name: "go-server",
      script: "./bin/server",
      autorestart: true,
      restart_delay: 3000
    }
  ]
}

4. 启动服务

pm2 start ecosystem.config.js

5. 常用管理命令

pm2 list              # 查看状态
pm2 logs              # 查看日志
pm2 restart all       # 重启全部服务
pm2 stop all          # 停止全部服务
pm2 delete all        # 删除全部服务
pm2 kill              # 停止 pm2 守护进程

四、Go 服务更新流程(推荐)

go build -o bin/server cmd/server/*.go
pm2 restart go-server

或:

pm2 restart all

五、防止 Mac 睡眠(避免服务断线)

1. 手动启用防睡眠

caffeinate -dimsu

2. 推荐:将 caffeinate 纳入 pm2 管理

{
  name: "keep-awake",
  script: "caffeinate",
  args: "-dimsu",
  autorestart: true
}

这样可统一控制:

pm2 stop keep-awake
pm2 restart keep-awake

六、开机自启(可选)

pm2 startup
pm2 save

重启系统后自动恢复服务。


七、终端 / 休眠行为总结

操作服务状态
关闭终端✅ 不受影响
锁屏✅ 不受影响
合盖(默认)❌ 系统休眠 → 服务暂停
caffeinate 启用✅ 合盖仍保持运行
系统重启 + pm2 startup✅ 自动恢复

八、可视化管理PM2

安装 ezpm2gui, 在 ecosystem.config.js 中加入一段:

{
  name: "ezpm2gui",
  script: "ezpm2gui",
  env: {
    HOST: "127.0.0.1",
    PORT: xxxx
  },
  autorestart: true,
  watch: false,
  max_memory_restart: "150M"
}

然后可以在浏览器里管理 pm2 下的进程了。


九、推荐实践

  • 开发期:pm2 + 手动 build + restart
  • 长期运行:pm2 + caffeinate
  • 多服务统一托管:ecosystem.config.js
  • 避免 nohup / 孤儿进程,统一交给 pm2 管理

十、最终效果

  • 本地服务长期稳定运行
  • 终端关闭无影响
  • 自动重启防崩溃
  • 防止休眠导致断服
  • 一条命令可控所有服务