请帮帮我。
我有一个全新的 ubuntu 服务器 22.04,其中安装了 node (v18.12.1) / express,并使用 PM2 作为进程管理器。
我安装了 Puppeteer 和 Chromium 浏览器,它们运行良好。我使用它来生成高质量的 PNG 文件供个人使用。
问题是,当我重新启动服务器时,PM2 成功启动了节点应用程序,因此我的网站可以访问。我可以成功 ping 它并得到响应,因此重新启动后 Web 应用程序可以正常工作。
问题是(重启后)如果我向我的 Web 应用发送请求并说,嘿,给我一张这个截图,Puppeteer 无法启动浏览器。我收到以下错误:
Error: Failed to launch the browser process!
/usr/bin/chromium-browser: 12: xdg-settings: not found
2022/12/08 00:36:47.167545 cmd_run.go:1055: WARNING: cannot start document portal: dial unix
/run/user/1001/bus: connect: no such file or directory
/system.slice/pm2-sammy.service is not a snap cgroup
现在,假设我重新启动服务器,并以用户 sammy 的身份通过 ssh 进入服务器(所有内容都已安装并应该以 - pm2 启动项保存在用户 /home.sammy 中等)并且如果我要求相同的屏幕截图,现在一切都按预期工作。
看起来只要 ssh 进入服务器就会触发某些操作,然后一切就都正常了。我不知道我错过了什么。顺便说一句,我在本地 Vagrant 机器上可以正常使用。
我认为在重新启动时用户 sammy 下没有运行会话,因此它在 ssh 登录后可以工作,因为会话已启动?
答案1
好的,伙计们,我找到了解决方案。我会将其作为答案发布,希望它能帮助到别人。
我不得不启用用户逗留功能。
loginctl enable-linger sammy
Google 的简单解释:
What does enable linger do?
Enable/disable user lingering for one or more users. If enabled for a specific
user, a user manager is spawned for the user at boot and kept around after
logouts. This allows users who are not logged in to run long-running services.
我现在能够在服务器重启后直接通过 puppeteer 启动 chromium 浏览器,而无需先进行 ssh 登录。