CN2 VPS 本质是 Linux 服务器,Python 定时任务不执行时,优先检查系统 Cron 服务状态和日志路径。CentOS 查看/var/log/cron,Ubuntu 查看/var/log/syslog,同时在 Crontab 任务行末尾添加输出重定向以捕获 Python 脚本的具体报错。
先说结论:日志查看取决于操作系统发行版,且必须配合任务输出重定向才能定位 Python 脚本内部错误。
- 先确认 Cron 服务是否运行 (systemctl status cron/crond)
- 先处理 环境变量与路径问题 (绝对路径 + 显式 PATH)
- 再验证 日志文件是否有写入权限 (chmod/touch)
命令速用版
以下命令可直接在终端执行,用于快速定位服务状态和日志位置:
systemctl status cron
tail -f /var/log/cron
crontab -l
若使用 Ubuntu/Debian 系统,日志命令调整为:
grep CRON /var/log/syslog
为什么会这样
Cron 执行环境与手动 Shell 环境完全不同,默认不继承用户 PATH 和工作目录。Python 脚本在终端能跑但定时任务失败,通常是因为 Cron 找不到 python 命令或脚本内的相对路径失效。Cron 默认工作目录是根目录/,且 PATH 仅包含/usr/bin:/bin,导致依赖环境变量的脚本无法启动。
分步处理
第一步:确认 Cron 服务状态
执行 systemctl status cron(Debian/Ubuntu)或 systemctl status crond(CentOS/RHEL)。若状态为 inactive (dead),需运行 systemctl start cron 启动并设置开机自启。部分精简版镜像可能未安装 cron,需手动安装。
第二步:查看系统级 Cron 日志
日志能记录任务是否被触发。CentOS/RHEL 查看/var/log/cron,Ubuntu/Debian 查看/var/log/syslog 并过滤 CRON 关键字。若日志无记录,说明任务未触发或服务未运行。
第三步:配置任务输出重定向
系统日志仅记录任务调度,不记录脚本内部报错。需在 Crontab 任务行末尾添加重定向,将标准输出和错误输出写入文件。例如:
0 2 * * * /usr/bin/python3 /home/user/script.py >> /home/user/logs/cron.log 2>&1
确保日志目录存在且有写权限,否则会导致 Permission denied。
第四步:修正路径与环境变量
脚本内所有文件路径必须使用绝对路径。在 Crontab 文件顶部显式声明 PATH 变量,包含 python 所在目录。若使用虚拟环境,需激活环境或使用虚拟环境内的 python 绝对路径。
怎么验证是否生效
创建一个测试脚本,内容为 touch /tmp/cron_test_file,配置每分钟执行一次。等待一分钟后检查/tmp 目录下文件是否生成。若文件生成,说明 Cron 服务正常;若未生成,查看重定向的日志文件内容,根据报错信息调整路径或权限。
常见坑
1. 相对路径失效:脚本内引用 config.json 或日志文件时,不能使用./,必须写全路径如/home/user/config.json。
2. 命令找不到:终端能用的 python 命令,Cron 可能找不到。使用 which python3 获取绝对路径填入 Crontab。
3. 权限不足:脚本文件需赋予执行权限 chmod +x,且日志目录所有者需与执行用户一致。
4. 环境变量缺失:脚本依赖的 HOME 或 PATH 变量在 Cron 中可能为空,需在脚本开头或 Crontab 顶部显式声明。
常见问题
系统日志里有记录但脚本没运行怎么办
说明任务已触发但脚本执行失败。查看任务行末尾重定向的日志文件,通常是因为 Python 路径错误或脚本内相对路径找不到文件。
日志文件 Permission denied 如何解决
检查日志文件所属用户是否与 Crontab 执行用户一致。若使用 root 执行任务,日志文件需 root 可写;若使用普通用户,需确保该用户对日志目录有写权限。
宝塔面板定时任务不执行怎么查
宝塔依赖系统 Cron 服务,先检查系统服务状态。宝塔自身日志位于/www/wwwlogs/cron.log,可查看面板调度记录。若脚本需 root 权限,需在面板任务设置中选择 root 用户执行。
参考来源
- 如何排查 Crontab 定时任务不执行的常见路径配置问题
- 宝塔面板安装后定时任务不执行_检查 Cron 服务与日志状态
- Linux 下使用 Cron 定时执行 Python 脚本 常见路径与权限报错【教程】
- Crontab-手动执行 python 脚本没问题,用 crontab 定时任务未执行
- crontab 定时任务不执行的解决办法
- Linux Crontab 查看定时任务启动没