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

通过Crontab运行Python脚本无报错但无法发送Telegram消息

问题排查与解决方案

1. 修正Crontab的错误输出重定向

你的Crontab命令中错误输出重定向写法有误,&2>1应改为2>&1,否则脚本的错误信息不会被写入日志,导致你无法看到Telegram发送失败的具体原因。修正后的命令:

00 12 * * * /usr/bin/python3 /root/data/App/Briefing/main.py >> /home/main.log 2>&1

注:DISPLAY=:0是针对图形界面程序的,你的脚本无需该环境变量,可直接移除。

2. 解决工作目录不一致问题

Crontab默认工作目录为用户主目录(如/root),而你的脚本使用相对路径读取checkpoint.csv、spiegel.csv等文件,这会导致Crontab运行脚本时找不到这些文件。

解决方法二选一:

  • 在脚本开头添加切换工作目录的代码:
    import os
    # 切换到脚本所在目录
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    
  • 将所有pd.read_csv的路径改为绝对路径,例如:
    pd.read_csv('/root/data/App/Briefing/checkpoint.csv', sep=';')
    

3. 给Telegram发送函数添加异常捕获

你的sendMessage函数未做任何异常处理,即使发送失败也不会输出错误信息。修改send.py,添加异常捕获并打印错误:

import telebot

def sendMessage(msg):
    try:
        bot = telebot.TeleBot("XXXXXX")
        bot.send_message(chat_id="@morgenbriefing", text=msg, parse_mode="MarkdownV2")
        print("Telegram消息发送成功")
    except Exception as e:
        print(f"Telegram消息发送失败: {str(e)}")

修改后错误信息会被写入日志,你就能明确是格式错误、API问题还是网络问题导致的失败。

4. 完善MarkdownV2格式转义

Telegram的MarkdownV2对特殊字符转义要求严格,你的createMsg函数仅转义了部分字符,可能存在遗漏(如_、[、]等)。可补充转义规则:

s = s.replace("-", "\\-")
s = s.replace(".", "\\.")
s = s.replace("(", "\\(")
s = s.replace(")", "\\)")
s = s.replace("*", "\\*")
s = s.replace("!", "\\!")
s = s.replace("_", "\\_")
s = s.replace("[", "\\[")
s = s.replace("]", "\\]")
s = s.replace("=", "\\=")
s = s.replace("`", "\\`")

或者直接使用telebot内置的转义工具简化操作:

from telebot import util

# 替换原有的手动转义代码
thema = util.escape_markdown(data['Thema'][i], version=2)
zsm = util.escape_markdown(data['Zusammenfassung'][i], version=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:15:03