crontab 定时任务不执行?按这几步查
【摘要】 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)