You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下PM2 --watch多用户编辑文件时不触发重载问题

Ubuntu环境PM2 watch模式不自动重载应用解决方案

问题核心原因

配置失效的核心问题有两个:

  1. 执行pm2 startup生成的systemd自启服务默认绑定执行命令的初始用户(即ubuntu主用户),后续切换用户启动应用时,没有重新生成对应sftp用户的自启服务,PM2守护进程实际运行身份和项目文件所有者sftp不匹配
  2. 切换用户时未使用登录式切换,环境变量未正确加载,操作的还是原用户的PM2实例,没有真正在sftp用户上下文下运行进程

修复步骤

  • 清理旧的错误配置
    切回ubuntu用户,执行以下命令删除之前绑定错误用户的PM2自启服务:
    sudo pm2 unstartup systemd
    
  • 生成sftp用户专属的PM2自启服务
    执行带-参数的登录式用户切换,加载sftp用户的完整环境:
    sudo su - sftp
    
    切换成功后,执行命令生成绑定sftp用户的systemd服务,注意把命令里的/home/sftp替换为sftp用户的实际家目录路径:
    pm2 startup systemd -u sftp --hp /home/sftp
    
    执行完上述命令后,终端会输出一行需要sudo权限执行的指令,直接复制该行指令执行即可完成自启服务注册。
  • 重新启动带监听的应用
    保持在sftp用户的shell上下文,先清除旧的PM2进程记录:
    pm2 delete all
    
    使用项目文件的绝对路径启动应用,同时排除不需要监听的目录,避免触发inotify监听数上限导致失效:
    pm2 start /你的项目绝对路径/index.js --watch --name app_name --ignore-watch="node_modules logs .git temp"
    
    启动后执行保存命令,将当前进程列表写入开机恢复配置:
    pm2 save
    
  • 修复系统inotify监听上限(必做,绝大多数隐性失效都是这个原因)
    切回有权限的用户执行以下操作,写入系统配置:
    sudo echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf
    sudo sysctl -p
    
  • 验证效果
    重启PM2服务加载配置:
    sudo systemctl restart pm2-sftp
    
    修改任意项目文件后,执行pm2 logs app_name查看日志,即可看到自动重载的触发记录。

注意事项

后续所有PM2相关操作(启动、重启、修改配置、save)都需要先通过sudo su - sftp切到sftp用户下执行,不要直接在ubuntu用户下操作,否则会再次出现运行用户不匹配、配置不生效的问题。

内容的提问来源于stack exchange,提问作者LAZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:15:51