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

如何从终端向树莓派上Puppeteer/Node.js运行的网络爬虫发送信号?

两种简单的手动触发爬虫方案

方案一:系统信号触发(轻量无额外依赖)

Node.js原生支持监听系统信号,无需安装额外包,步骤非常简单:

  1. 修改你的爬虫脚本,添加信号监听逻辑:
// 假设你的核心下载函数是这个
function downloadData() {
  // 这里写你的Puppeteer爬取逻辑
  console.log('开始执行数据下载...');
}

// 监听自定义信号SIGUSR1
process.on('SIGUSR1', () => {
  console.log('收到手动触发指令,立即启动下载');
  downloadData();
});

// 保留原来的定时任务(示例用node-schedule,如果你用其他定时工具也一样)
const schedule = require('node-schedule');
// 每天6点、18点执行
schedule.scheduleJob('0 6,18 * * *', downloadData);
  1. 手动触发时,在另一个终端执行命令:
    先找到爬虫进程的ID,或者直接用命令自动匹配:
# 自动找到爬虫进程并发送信号(把crawler.js换成你的脚本文件名)
kill -SIGUSR1 $(pgrep -f "node crawler.js")

如果怕匹配错进程,可以先用ps aux | grep node确认PID,再执行kill -SIGUSR1 进程ID。

方案二:HTTP接口触发(直观易操作)

给爬虫加一个极简的HTTP接口,通过curl或浏览器访问就能触发,新手更容易上手:

  1. 修改爬虫脚本,添加HTTP服务器逻辑:
const http = require('http');

function downloadData() {
  // 你的Puppeteer爬取逻辑
  console.log('开始执行数据下载...');
}

// 创建简单的HTTP服务器
const server = http.createServer((req, res) => {
  // 只响应/run路径的GET请求
  if (req.url === '/run' && req.method === 'GET') {
    downloadData();
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('已触发数据下载\n');
  } else {
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end('无效接口\n');
  }
});

// 监听本地3000端口(端口可以自己改)
server.listen(3000, 'localhost', () => {
  console.log('手动触发服务已启动,访问 http://localhost:3000/run 即可触发下载');
});

// 保留原来的定时任务
const schedule = require('node-schedule');
schedule.scheduleJob('0 6,18 * * *', downloadData);
  1. 手动触发时,在另一个终端执行:
curl http://localhost:3000/run

如果树莓派有桌面环境,也可以直接打开浏览器访问这个地址。

方案对比

  • 信号触发:无需额外端口,资源占用极低,适合追求轻量的场景;需要记简单的命令。
  • HTTP接口:操作更直观,不用管进程ID,适合对命令行不太熟悉的新手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:33:23