Ubuntu环境下PM2 --watch多用户编辑文件时不触发重载问题
Ubuntu环境PM2 watch模式不自动重载应用解决方案
问题核心原因
配置失效的核心问题有两个:
- 执行
pm2 startup生成的systemd自启服务默认绑定执行命令的初始用户(即ubuntu主用户),后续切换用户启动应用时,没有重新生成对应sftp用户的自启服务,PM2守护进程实际运行身份和项目文件所有者sftp不匹配 - 切换用户时未使用登录式切换,环境变量未正确加载,操作的还是原用户的PM2实例,没有真正在sftp用户上下文下运行进程
修复步骤
- 清理旧的错误配置
切回ubuntu用户,执行以下命令删除之前绑定错误用户的PM2自启服务:sudo pm2 unstartup systemd - 生成sftp用户专属的PM2自启服务
执行带-参数的登录式用户切换,加载sftp用户的完整环境:
切换成功后,执行命令生成绑定sftp用户的systemd服务,注意把命令里的sudo su - sftp/home/sftp替换为sftp用户的实际家目录路径:
执行完上述命令后,终端会输出一行需要sudo权限执行的指令,直接复制该行指令执行即可完成自启服务注册。pm2 startup systemd -u sftp --hp /home/sftp - 重新启动带监听的应用
保持在sftp用户的shell上下文,先清除旧的PM2进程记录:
使用项目文件的绝对路径启动应用,同时排除不需要监听的目录,避免触发inotify监听数上限导致失效:pm2 delete all
启动后执行保存命令,将当前进程列表写入开机恢复配置: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-sftppm2 logs app_name查看日志,即可看到自动重载的触发记录。
注意事项
后续所有PM2相关操作(启动、重启、修改配置、save)都需要先通过sudo su - sftp切到sftp用户下执行,不要直接在ubuntu用户下操作,否则会再次出现运行用户不匹配、配置不生效的问题。
内容的提问来源于stack exchange,提问作者LAZ
相关产品推荐
相关产品推荐

