求助:如何让Ubuntu服务器上的Headless Chrome 24/7持续运行?
我来帮你搞定Ubuntu服务器上让Headless Chrome全天候跑起来的问题!之前SSH一断开remote-debugging就挂、PHP脚本启动失败的情况,试试下面这几个靠谱方案,总有一个适合你:
方案1:用
nohup快速后台启动 这是最直接的临时解决方案,适合快速测试。直接在SSH里运行:
nohup google-chrome --headless=new --remote-debugging-port=9222 --disable-gpu > chrome-headless.log 2>&1 &
nohup会让进程彻底脱离当前终端,哪怕SSH断开也能继续运行> chrome-headless.log 2>&1把所有输出(包括错误信息)写到日志文件里,方便后续排查问题&让进程直接在后台启动
要停止的话,先找到进程ID:
ps aux | grep google-chrome
然后用kill -9 <PID>杀掉对应进程就行。
方案2:用
screen/tmux持久化会话 如果你偶尔需要重新连接进去查看Chrome的运行状态,这个方法特别合适。
用screen的步骤:
- 先安装screen(没装过的话):
sudo apt update && sudo apt install screen
- 创建一个专属会话:
screen -S chrome-headless
- 在会话里直接启动Chrome:
google-chrome --headless=new --remote-debugging-port=9222 --disable-gpu
- 按
Ctrl+A再按D,就能分离会话——此时SSH断开完全不会影响进程运行 - 下次想重新连接查看,运行:
screen -r chrome-headless
- 要关闭会话的话,在会话里按
Ctrl+D,或者用screen -X -S chrome-headless quit
用tmux的话步骤类似:
安装tmux后,用tmux new -s chrome-headless创建会话,Ctrl+B+D分离,tmux attach -t chrome-headless重新连接就行。
方案3:配置
systemd服务(推荐,长期运行最稳定) 这是服务器上运行长期服务的标准操作,不仅能自动开机启动,进程挂了还会自动重启,稳得一批。
- 创建systemd服务文件:
sudo nano /etc/systemd/system/chrome-headless.service
- 粘贴下面的内容(记得把
your-username换成你的实际用户名,比如ubuntu):
[Unit] Description=Headless Chrome with Remote Debugging After=network.target [Service] User=your-username ExecStart=/usr/bin/google-chrome --headless=new --remote-debugging-port=9222 --disable-gpu --no-sandbox --disable-dev-shm-usage Restart=always RestartSec=5 StandardOutput=journal+console StandardError=journal+console [Install] WantedBy=multi-user.target
--no-sandbox和--disable-dev-shm-usage是为了避免服务器环境下的权限和内存限制问题Restart=always确保进程意外退出后自动重启User指定运行Chrome的用户,别用root,避免安全风险
- 保存文件后,重新加载systemd配置:
sudo systemctl daemon-reload
- 启动服务并设置开机自启:
sudo systemctl start chrome-headless.service sudo systemctl enable chrome-headless.service
- 查看服务运行状态:
sudo systemctl status chrome-headless.service
- 查看实时运行日志:
journalctl -u chrome-headless.service -f
- 停止服务的话:
sudo systemctl stop chrome-headless.service
为啥之前PHP脚本启动没成功?
大概率是因为PHP运行在web服务器的用户(比如www-data)权限不足,或者没让Chrome脱离终端环境。如果一定要用PHP启动,你可以让PHP调用systemd的启动命令(需要给www-data加sudo权限,不推荐),或者在PHP里用nohup启动,但还是建议用systemd,稳定性和可维护性都强得多。
内容的提问来源于stack exchange,提问作者Charles Jeremy Colnet
相关产品推荐
相关产品推荐

