linux定时任务不执行主因是环境、路径和日志问题:需检查crontab语法与加载状态、显式声明环境变量、使用绝对路径、确认脚本权限与上下文、并通过系统日志、脚本日志及邮件定位真实失败原因。

Linux 定时任务不执行,多数不是“没配置”,而是“配了但没跑成”。真正卡住的地方往往藏在环境、路径和日志里。下面这几点,覆盖了 90% 的真实故障场景。
检查 crontab 语法和任务是否生效
很多人改完 crontab 就以为万事大吉,其实第一步得确认它真被加载了:
- 运行 crontab -l 查看当前用户的任务列表,确认你的那行任务确实存在
- 注意时间字段顺序:分、时、日、月、周 —— 写反或少写一个星号都会失效
- 避免空格混乱:命令前后的空格要规范,尤其在脚本路径和重定向符号之间
- 用 crontab.guru 验证表达式,比如 0 2 * * * 表示每天凌晨 2 点,而不是“每两小时”
重点排查环境变量差异
crontab 默认只加载极简环境:PATH=/usr/bin:/bin,没有你的 .bashrc、没有虚拟环境、甚至找不到 python3 或 pip。
抖猫高清去水印微信小程序,源码为短视频去水印微信小程序全套源码,包含微信小程序端源码,服务端后台源码,支持某音、某手、某书、某站短视频平台去水印,提供全套的源码,实现功能包括:1、小程序登录授权、获取微信头像、获取微信用户2、首页包括:流量主已经对接、去水印连接解析、去水印操作指导、常见问题指引3、常用工具箱:包括视频镜头分割(可自定义时长分割)、智能分割(根据镜头自动分割)、视频混剪、模糊图片高
- 在 crontab 文件顶部显式声明环境变量,例如:
PART=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash - 脚本中避免依赖交互式 shell 的配置,不要靠 source ~/.bashrc 激活环境(crontab 不读这个)
- 调用命令时优先用绝对路径,比如 /usr/local/bin/python3 /path/to/script.py,而不是只写 python3
- 如果用了 pip 安装的模块(如 pymongo),确保该 Python 解释器下已安装对应包,且路径一致
确认脚本权限与执行上下文
crontab 不会自动帮你解决“谁来跑、在哪跑、有没有权跑”的问题:
- 给脚本加执行权限:chmod +x /path/to/your_script.sh
- 脚本内所有文件路径(日志、配置、数据)必须用绝对路径,相对路径(如 ./config.json)在 crontab 中默认从用户 home 目录开始找,极易出错
- 如果脚本里用了 sudo 或需要 root 权限,要确认 crontab 是 root 用户添加的,或配置好免密策略;普通用户 crontab 无法直接执行 sudo 命令
- 手动模拟 crontab 执行环境测试:env -i PATH=/usr/bin:/bin SHELL=/bin/bash /bin/bash -c "/path/to/script.sh"
抓取日志定位真实失败原因
别猜,看日志。crontab 自身和脚本输出是两回事:
- 查 crond 系统日志:tail -f /var/log/cron(CentOS/RHEL)或 journalctl -u cron -n 50(Ubuntu/Debian)
- 让脚本输出落到文件,而不是丢进 /dev/null:
0 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1 - 检查系统邮件:cat /var/spool/mail/$USER,crontab 错误常以邮件形式发送,尤其缺少命令或权限报错
- 脚本开头加一句 date >> /tmp/cron_debug.log,能快速验证是否真的触发了









