crontab任务不执行主因是环境、路径或权限问题。需确认crond服务运行,补全PATH或用绝对路径,脚本加执行权限,/etc/crontab及cron.d文件须含用户名且权限644,命令末尾添加>>log 2>&1记录输出。

crontab 任务不执行,八成是环境、路径或权限没对齐,不是语法写错了。
crontab -e 编辑后不生效?先确认服务在跑
crond 进程没起来,所有配置都是空谈。Debian/Ubuntu 用 systemctl status cron,CentOS/RHEL 用 systemctl status crond。如果看到 inactive (dead):
- 运行
sudo systemctl start cron(或crond)启动服务 - 再执行
sudo systemctl enable cron(或crond)确保开机自启 - 别信“系统默认开启”——某些最小化安装或容器镜像压根没开这个服务
脚本在终端能跑,放进 crontab 就失败?环境变量是主因
crond 启动时只加载极简环境,PATH 基本只有 /usr/bin:/bin,git、python3、node 等命令很可能找不到。
- 在
crontab -e文件顶部加一行:PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin - 或者直接在命令前写全路径,比如用
/usr/bin/python3 /opt/script.py而不是python3 /opt/script.py - 脚本里也别依赖当前工作目录——开头加
cd /opt/script_dir或直接用绝对路径读写文件
/etc/crontab 和 /etc/cron.d/ 下的任务总被忽略?格式和权限卡得死
这两个位置的文件必须带「执行用户」字段,且不能用 crontab -e 写入;否则 crond 直接跳过整行。
-
/etc/crontab格式是:分 时 日 月 周 用户名 命令,漏掉「用户名」就无效 -
/etc/cron.d/myjob同样要含用户名,且文件权限必须是644(sudo chmod 644 /etc/cron.d/myjob) - 文件名不能带点或破折号(如
my-job或backup.sh),部分版本会拒绝加载
日志看不到输出?2>&1 和日志路径得手动配
crontab 默认把 stdout/stderr 发邮件给用户,但多数服务器没配本地 MTA,结果就是静默失败。
- 每条命令末尾加上:
>> /var/log/mytask.log 2>&1 - 确保日志路径所在目录可写,比如
/var/log/mytask.log所在目录归属用户得对得上 - 查系统级日志:用
sudo grep CRON /var/log/syslog(Debian/Ubuntu)或sudo grep CRON /var/log/cron(RHEL/CentOS)
最常被跳过的细节:脚本本身没 +x 权限、日志目录不存在、/etc/cron.d/ 文件里用了 tab 而不是空格分隔字段——这些不会报错,只会让任务彻底消失。


















