定时任务全自动:从 cron 到告警,一套 SERP 监控不落地
搭 SERP 监控,最难的不是"查一次",而是让它每天自动跑、出错能发现、结果能交付。这篇讲一套完整的调度方案:定时触发 + 失败告警 + 结果存储。
整体架构
定时触发(GitHub Actions / cron)
→ 跑监控脚本(SERP API)
→ 成功:存结果
→ 失败:告警(邮件/Slack)
方案一:GitHub Actions(推荐,免费)
name: serp-monitor
on:
schedule:
- cron: "0 */6 * * *" # 每 6 小时
workflow_dispatch: # 手动触发
jobs:
monitor:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: "3.11" }
- run: pip install requests
- name: Run monitor
env:
SERPBASE_API_KEY: ${{ secrets.SERPBASE_API_KEY }}
run: python monitor.py
监控脚本
import os, requests
def run_monitor():
keywords = open("keywords.txt").read().splitlines()
results = {}
failures = []
for kw in keywords:
try:
r = requests.post(
"https://api.serpbase.dev/google/search",
headers={"X-API-Key": os.environ["SERPBASE_API_KEY"]},
json={"q": kw, "hl": "zh-CN", "gl": "cn"},
timeout=10,
)
r.raise_for_status()
results[kw] = r.json()
except Exception as e:
failures.append((kw, str(e)))
# 存结果
save_results(results)
# 有失败就告警
if failures:
send_alert(f"{len(failures)} 个关键词失败: {failures[:3]}")
失败告警
发邮件:
def send_alert(msg):
import smtplib
from email.mime.text import MIMEText
m = MIMEText(msg, "plain", "utf-8")
m["Subject"] = "[SERP监控] 任务失败"
m["From"] = "you@example.com"
m["To"] = "you@example.com"
with smtplib.SMTP("smtp.example.com", 587) as s:
s.starttls(); s.login("you", "pass"); s.send_message(m)
或者发 Slack / 飞书 webhook,几行代码。
结果存储
按日期存,方便回溯:
def save_results(results):
import json
from datetime import datetime
fname = f"results/{datetime.now():%Y%m%d-%H}.json"
with open(fname, "w", encoding="utf-8") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
方案二:本地 cron
不想用 Actions,本地 VPS 也行:
# crontab -e
0 */6 * * * cd /opt/serp && python monitor.py >> monitor.log 2>&1
告警阈值
不是每次失败都要告警。设置分级:
def alert_policy(failures, total):
rate = len(failures) / total
if rate > 0.05:
send_alert(f"失败率 {rate:.0%},需要处理") # 紧急
elif failures:
send_alert(f"{len(failures)} 个失败") # 普通
注意
- 超时设置:SERP 调用设 10s 超时,避免卡死
- 重试:失败重试 1-2 次再告警,网络抖动不误报
- 幂等:重试带幂等 key,不重复扣费
效果
一套跑下来:每天自动跑 4 次,失败自动告警,结果按小时存,全程不落地。
完整参数和响应字段参考:serpbase.dev/docs。搭好之后,这套东西可以几个月不用管。

浙公网安备 33010602011771号