连载中 17/20

crontab:定时任务怎么写,以及为什么它总不跑

2026-10-21 · 40 阅读 · 0 评论 · 0 赞

五段式:分 时 日 月 周

$ crontab -e     # 编辑当前用户的定时任务(自动用 vim 打开)
$ crontab -l     # 列出已有任务

# ┌───── 分钟 (0-59)
# │ ┌───── 小时 (0-23)
# │ │ ┌───── 日 (1-31)
# │ │ │ ┌───── 月 (1-12)
# │ │ │ │ ┌───── 周 (0-7,0 和 7 都是周日)
# * * * * * 命令

对照表背这七个就覆盖 95% 的需求:

*/1 * * * *    每分钟        0 2 * * *     每天凌晨 2 点
0 2 * * 1      每周一 2 点   0 2 1 * *     每月 1 号 2 点
30 9 * * 1-5   工作日 9 点半 0 */2 * * *   每 2 小时
0 2 * * * /opt/app/backup.sh >> /var/log/backup.log 2>&1

暗坑一:cron 的环境变量被重置

「命令行手跑好好的,放进 cron 就不跑」——九成是环境变量:cron 启动的 shell 是「干净」的,不加载 .bashrc,PATH 只有短短几个目录,你的 java、mvn 一律找不到。

# 解法:脚本里用绝对路径,或在 crontab 顶部补 PATH
PATH=/usr/local/bin:/opt/jdk/bin:/usr/bin:/bin

# 更稳的写法:cron 只负责定时,活交给脚本,变量在脚本里配
0 2 * * * /opt/app/bin/backup.sh

暗坑二:输出被静默吞掉

cron 任务的 stdout/stderr 默认发给本地邮件,而大多数服务器没配邮件——报错就这么无声无息地消失了。规则:每条 cron 都显式重定向到日志,跑没跑、报什么,日志说了算。

# 看系统有没有执行过你的任务(时间点对不对一眼便知)
$ tail -f /var/log/cron

暗坑三:crontab -r 是一键全删

crontab -r 删除当前用户全部定时任务,且没有任何确认。手滑 -e 敲成 -r 的故事在生产环境屡见不鲜。防呆姿势:把所有 cron 内容托管在文件里(进版本库),机器上只做安装动作:

$ crontab /opt/app/etc/app.cron    # 从文件整体导入(覆盖式,可重复执行)
$ crontab -l | wc -l               # 导入后核对条数

实战:一套完整的日志备份节奏

# crontab 内容
PATH=/usr/local/bin:/usr/bin:/bin
0 1 * * * /opt/app/bin/backup-log.sh >> /var/log/app/backup.log 2>&1

# backup.sh 里做三件事:压缩 → 搬运到数据盘 → 清理 30 天前的备份
# (tar、find -mtime、rm 的组合,全部本系列讲过的命令)

下一篇:日志分析——journalctl 与 logrotate 的正确配置,让日志既找得到线索、又不撑爆磁盘。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#crontab#定时任务#cron#运维#自动化

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞