如何写消息提醒脚本

wen 实用脚本 25

从零到部署的完整指南

文章目录导读

  1. 消息提醒脚本的核心价值 – 为什么你需要自动化提醒?
  2. 基础准备 – 环境、语言与工具选型
  3. 分步实现 – 从终端通知到多渠道推送
  4. 关键技巧 – 参数配置、错误处理与定时触发
  5. 实战问答 – 常见问题与解决方案
  6. – 最佳实践与进阶思路

消息提醒脚本:为什么它是必备技能?

在自动化运维、监控系统或个人效率工具中,消息提醒脚本是连接“事件发生”与“人知悉”的桥梁,无论是服务器宕机、股票价格触发阈值,还是每日打卡提醒,一个可靠的脚本能帮你节省大量手动检查时间。

如何写消息提醒脚本

核心场景:

  • 系统监控告警(CPU过载、磁盘空间不足)
  • 任务结果推送(数据同步完成、批处理结束)
  • 定时生活提醒(喝水、会议、药物服用)
  • 金融/爬虫信号(价格波动、文章更新)

搜索引擎优化注意点: 本文使用语义化标题、分段式结构、关键词自然嵌入(如“消息提醒脚本”“Python推送通知”“Shell脚本通知”),符合Google及Bing对长尾词的排名规则。


基础准备:选对工具,事半功倍

1 脚本语言选择

语言 适用场景 库/模块
Python 跨平台、功能丰富 smtplib / requests / subprocess
Bash Linux系统快速实现 mail / curl / notify-send
PowerShell Windows深度集成 Send-MailMessage / BurntToast
Node.js 全栈开发、实时应用 node-notifier / nodemailer

建议:初学者从Python入手,生态最全;Linux运维选Bash,零依赖。

2 消息通道选择

  • 本地通知notify-send(Linux)、osascript(Mac)、toast(Windows)
  • 邮件提醒:QQ邮箱/163邮箱/企业邮箱+SMTP
  • 即时推送:企业微信机器人、钉钉Webhook、Telegram Bot、Pushover
  • 短信/电话:Twilio、阿里云短信API(需付费)

分步实现:一个完整的消息提醒脚本

1 本地桌面通知(Python)

# notify_desktop.py
from plyer import notification
import time
def send_local_notification(title, message, timeout=10):
    notification.notify(
        title=title,
        message=message,
        app_name="My Reminder",
        timeout=timeout
    )
if __name__ == "__main__":
    send_local_notification("提醒", "该喝水了!请站起来走走。")

注意: 需要安装plyer库(pip install plyer),支持Windows/Mac/Linux。

2 企业微信机器人推送(HTTP请求)

# wechat_reminder.py
import requests
import json
def send_wechat_robot(webhook_url, content, mentioned_list=[]):
    data = {
        "msgtype": "text",
        "text": {
            "content": content,
            "mentioned_list": mentioned_list  # @所有人可传 ["@all"]
        }
    }
    resp = requests.post(webhook_url, json=data)
    return resp.status_code == 200
if __name__ == "__main__":
    url = "你的企业微信机器人Webhook地址"  # 替换为实际地址
    send_wechat_robot(url, "服务器CPU超过90%!请立即查看。", ["@all"])

安全提示: Webhook地址建议使用环境变量存储,避免硬编码在脚本中。

3 邮件提醒(Python + SMTP)

# mail_reminder.py
import smtplib
from email.mime.text import MIMEText
def send_email(sender, password, receiver, subject, body, smtp_server, port=587):
    msg = MIMEText(body, "plain", "utf-8")
    msg["Subject"] = subject
    msg["From"] = sender
    msg["To"] = receiver
    with smtplib.SMTP(smtp_server, port) as server:
        server.starttls()
        server.login(sender, password)
        server.send_message(msg)
if __name__ == "__main__":
    send_email(
        sender="your_email@qq.com",
        password="你的SMTP授权码",
        receiver="target@example.com",
        subject="每日数据汇总",
        body="今天的数据已处理完成,请登录系统查看报表。",
        smtp_server="smtp.qq.com"
    )

关键技巧:让脚本更健壮、更实用

1 参数配置化

不要硬编码敏感信息,推荐使用:

  • 环境变量os.getenv("WEBHOOK_URL")
  • 配置文件config.iniconfig.yaml
  • 参数解析argparse 模块

2 错误处理与重试

import time
from retry import retry  # pip install retry
@retry(tries=3, delay=2)
def send_notification_with_retry(url, payload):
    resp = requests.post(url, json=payload, timeout=10)
    if resp.status_code != 200:
        raise Exception(f"推送失败: {resp.text}")

3 定时触发

  • Crontab(Linux/Mac)
    # 每天早上9点执行
    0 9 * * * /usr/bin/python3 /path/to/script.py >> /var/log/reminder.log 2>&1
  • Windows任务计划程序:创建一个基本任务,触发器设为每天9点,操作启动Python脚本。
  • Python内循环(不推荐长期运行):
    import schedule
    schedule.every().day.at("09:00").do(job)
    while True:
        schedule.run_pending()
        time.sleep(60)

4 多通道组合

实际场景往往需要“主备”或“升级”策略,先尝试本地通知,失败则转为邮件;如果邮件也失败,调用企业微信。

def alert_all(title, msg):
    try:
        send_local_notification(title, msg)
    except:
        try:
            send_email(...)
        except:
            send_wechat_robot(...)

实战问答:解决你遇到的常见问题

Q1:为什么本地通知在Linux上不弹出?

A: 检查是否安装了 libnotify-binsudo apt install libnotify-bin),在无桌面环境的服务器中,本地通知无法工作,应改用其他渠道。

Q2:企业微信机器人出现“请求频率过高”错误?

A: 每个机器人每分钟最多20条消息,如果批量发送,请加入 time.sleep(3) 或使用队列合并。

Q3:脚本运行在云服务器,邮件发送被当作垃圾邮件?

A: 确保:

  • 使用企业邮局或已经配置了SPF/DKIM的邮箱,避开敏感词汇。
  • 降低发送频率,可改用云服务商提供的邮件API(如SendGrid、阿里云邮件)。

Q4:如何安全地存储SMTP密码或API密钥?

A: 推荐方案:

  • 使用环境变量(如 .env 文件加 python-dotenv)。
  • 密钥管理服务(Vault、AWS Secrets Manager)。
  • 生产环境可将脚本设为只读,密钥存放于单独配置文件并加入 .gitignore

Q5:Windows和macOS都有哪些本地通知方案?

A:

  • Windows:使用 win10toast 库,或 subprocess.run(["powershell", "New-BurntToastNotification"])
  • macOS:使用 osascript -e 'display notification "消息" with title "标题"'

从入门到自动化体系

写一个消息提醒脚本,本质上就是 “事件 → 判断 → 推送到通道” 的模型,你需要关注三点:

  1. 可靠性:错误重试、超时处理、主备通道。
  2. 可维护性:参数外部化、日志记录、清晰的注释。
  3. 扩展性:设计为函数或类,方便嵌入更大的自动化流程中。

推荐进阶方向

  • 结合 Prometheus/Grafana 报警钩子,实现微服务监控。
  • 使用 MQTT 协议,实现IoT设备触发提醒。
  • 部署为 FAAS(函数即服务),如阿里云函数计算、AWS Lambda。

工具在变,但原则不变:始终为用户(包括未来的自己)写出可读、可测试、不泄露秘密的代码,希望本文能帮你建立起自己的消息提醒体系,让自动化真正为你节省时间。


注:文章中的Webhook地址、SMTP服务器等示例域名和参数均为示意,实际使用时请替换为自己的安全配置。

抱歉,评论功能暂时关闭!