7×24小时不间断运行Node.js与Python配套程序的实现方案
可行性结论
这个需求完全可实现,核心要解决三个问题:进程异常自动重启、启动顺序保证(Python爬虫优先启动就绪后再运行Node脚本)、chromedriver相关的爬虫运行稳定性。
具体操作步骤
1. 前置环境校验
先在本地/服务器上跑通完整流程,排除基础问题:
- 确认Python爬虫的所有依赖(如selenium、requests等)都全局安装或在虚拟环境中配置完成,chromedriver版本必须和本地Chrome/Chromium版本完全匹配,否则会启动失败,给chromedriver加执行权限:
chmod +x /path/to/chromedriver - 确认Node项目的依赖已完成安装:
npm install,手动按「启动Python爬虫→等待爬虫服务就绪→启动Node脚本」的顺序运行完整流程,确认没有路径依赖、权限不足等问题。
2. 进程托管方案(二选一即可)
方案1:Linux系统自带systemd(服务器场景首选)
无需额外安装工具,原生支持启动顺序控制、异常自动重启、开机自启:
- 第一步编写Python爬虫的service配置文件,路径为
/etc/systemd/system/spider.service,示例内容如下:
[Unit] Description=Python Spider Service After=network.target [Service] User=普通运行用户名(不要填root) WorkingDirectory=/path/to/your/python/project # 用虚拟环境的话替换为虚拟环境的python路径,比如/opt/venv/bin/python ExecStart=/usr/bin/python3 /path/to/your/spider.py Restart=always RestartSec=1 Environment=PATH=/usr/local/bin:/path/to/chromedriver目录:$PATH [Install] WantedBy=multi-user.target
- 第二步编写Node项目的service配置文件,路径为
/etc/systemd/system/node-calc.service,配置依赖爬虫服务优先启动:
[Unit] Description=Node Calculation Service After=spider.service Requires=spider.service [Service] User=普通运行用户名(不要填root) WorkingDirectory=/path/to/your/node/project ExecStart=/usr/bin/node /path/to/your/index.js Restart=always RestartSec=1 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
- 执行命令生效配置:
# 重载systemd配置 systemctl daemon-reload # 开启开机自启 systemctl enable spider.service node-calc.service # 启动两个服务 systemctl start spider.service node-calc.service
- 查看实时日志命令:
journalctl -u 服务名 -f。
方案2:PM2托管(跨平台,Windows/Linux/macOS通用)
适合需要跨平台运行的场景,需先全局安装PM2:npm install -g pm2
- 编写PM2配置文件
ecosystem.config.js,配置启动顺序和重启策略:
module.exports = { apps : [ { name: "spider", script: "/path/to/your/spider.py", interpreter: "/usr/bin/python3", // 虚拟环境替换为对应python路径 cwd: "/path/to/your/python/project", autorestart: true, restart_delay: 1000, env: { PATH: "/path/to/chromedriver目录:" + process.env.PATH } }, { name: "node-calc", script: "index.js", cwd: "/path/to/your/node/project", autorestart: true, restart_delay: 1000, // 延迟3秒启动,保证爬虫服务已就绪 start_delay: 3000, env: { NODE_ENV: "production" } } ] }
- 启动命令:
pm2 start ecosystem.config.js - 开启开机自启:执行
pm2 startup后按提示复制输出的命令运行,再执行pm2 save保存当前进程列表。 - 查看日志命令:
pm2 logs 进程名,查看进程状态命令:pm2 status。
3. 爬虫稳定性优化
基于chromedriver的爬虫容易出现内存泄漏、进程僵死问题,需做额外保障:
- 爬虫代码中添加全链路异常捕获,每次爬取任务完成后主动销毁无用的浏览器实例,避免内存溢出。
- 配置定时重启策略:用systemd的话可以写cron任务每天凌晨低峰期重启两个服务;用PM2的话可以直接在对应进程配置中加
cron_restart: "0 0 * * *"实现每天零点自动重启。 - 可在爬虫中加简单的健康检查接口,配套简单的监控脚本,发现接口无响应时自动重启爬虫服务。
4. 额外稳定性保障
- 服务器开启交换分区,避免内存不足时进程被系统直接杀掉。
- 定期清理爬虫产生的临时文件、缓存,避免磁盘占满导致服务崩溃。
- 不要用root用户运行服务,使用普通权限用户运行即可,降低安全风险。
内容的提问来源于stack exchange,提问作者luis
相关产品推荐
相关产品推荐

