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

EC2实例中Cron日志显示任务运行但实际失败,如何排查及记录错误?

确认Cron任务执行状态与记录错误的方法

1. 给Cron任务添加日志重定向

/var/log/cron只记录任务是否触发,不会保存执行结果和错误信息。直接修改Cron任务,把标准输出和错误输出重定向到指定日志文件:

0 2 * * * /home/ec2-user/scripts/backup.sh >> /home/ec2-user/scripts/logs/backup.log 2>&1
0 3 * * 0 /home/ec2-user/scripts/cleanup.sh >> /home/ec2-user/scripts/logs/cleanup.log 2>&1
0 * * * * /home/ec2-user/scripts/health_check.sh >> /home/ec2-user/scripts/logs/health_check.log 2>&1

先提前创建日志目录,避免写入失败:

mkdir -p /home/ec2-user/scripts/logs
chown ec2-user:ec2-user /home/ec2-user/scripts/logs

之后直接查看对应日志文件,就能明确任务执行是否成功,以及失败的具体原因。

2. 查看Cron自动发送的邮件通知

Cron会把任务执行失败的信息发送到用户本地邮箱,用以下命令查看:

mail

如果任务返回非0的退出码,邮件里会包含完整的错误详情。要是想指定外部接收邮箱或者禁用邮件通知,在Cron文件顶部添加:

# 指定接收邮箱
MAILTO="your-email@example.com"
# 或者禁用邮件
MAILTO=""

3. 在脚本内部添加错误处理与日志

给shell脚本(比如cleanup.sh)添加日志记录和错误捕获逻辑,能更细致地追踪执行过程:

#!/bin/bash
LOG_FILE="/home/ec2-user/scripts/logs/cleanup_detail.log"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行cleanup脚本" >> $LOG_FILE

# 执行Python脚本并捕获所有输出
python3 /home/ec2-user/scripts/worker_script.py >> $LOG_FILE 2>&1
EXIT_CODE=$?

if [ $EXIT_CODE -ne 0 ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] cleanup脚本执行失败,退出码:$EXIT_CODE" >> $LOG_FILE
    exit $EXIT_CODE
else
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] cleanup脚本执行成功" >> $LOG_FILE
fi

4. 针对cleanup.sh连接失败的额外排查

你手动执行时遇到RabbitMQ连接拒绝错误,还需要确认:

  • RabbitMQ服务是否正常运行:systemctl status rabbitmq-server
  • 如果只有Cron执行时失败,大概率是Cron的环境变量和用户登录环境不一致(比如PATH缺失、Python路径不对)。可以在Cron任务开头指定完整环境变量,或者在脚本里用绝对路径调用Python:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * 0 /home/ec2-user/scripts/cleanup.sh >> /home/ec2-user/scripts/logs/cleanup.log 2>&1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:57:04