crontab 定时任务不执行?按这几步查

举报
yd_299926989 发表于 2026/11/11 15:01:18 2026/11/11
【摘要】 crontab 里写好了任务却不执行,这事挺常见的。下面是几个常见原因,按顺序查一遍,基本都能找到问题。 1. 先确认 cron 服务在跑systemctl status crond # CentOS / 部分 EulerOSsystemctl status cron # Ubuntu / Debian如果没启动,systemctl enable --now crond 拉起来...

crontab 里写好了任务却不执行,这事挺常见的。下面是几个常见原因,按顺序查一遍,基本都能找到问题。

1. 先确认 cron 服务在跑

systemctl status crond    # CentOS / 部分 EulerOS
systemctl status cron     # Ubuntu / Debian

如果没启动,systemctl enable --now crond 拉起来。

2. 看日志,确认到底有没有触发

grep CRON /var/log/cron        # CentOS 系
grep CRON /var/log/syslog      # Ubuntu 系

日志里有记录,说明触发了,是脚本本身出错;没记录,就回头查时间表达式和服务。

3. 环境变量不一样

这是最常见的坑。cron 跑任务时 PATH 很短,命令行里能用的 python3、mysqldump 到了 cron 里可能找不到。两种办法:

  • 脚本里写绝对路径,比如 /usr/bin/python3
  • 在 crontab 顶部加一行 PATH=/usr/local/bin:/usr/bin:/bin

4. 把输出存下来

默认输出没人看,出错了也不知道。调试时在任务后面加上重定向:

*/5 * * * * /root/backup.sh >> /tmp/backup.log 2>&1

跑一轮看 log,报错信息一般就在里面。

5. 百分号要转义

crontab 里 % 有特殊含义,会被当成换行。比如 date +%F 要写成 date +\%F,不然命令会被截断。

6. 时区别搞错

服务器时区不是东八区的话,写的 0 3 * * * 可能是别的时间点。timedatectl 看一下,必要时 timedatectl set-timezone Asia/Shanghai,改完重启下 cron 服务。

7. 脚本有没有执行权限

chmod +x 脚本 别忘了,或者在 crontab 里直接写 bash /root/xxx.sh。

基本就这些。一般第 3 条和第 4 条就能解决大半问题,日志一看就清楚了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。