Linux 定时任务 cron 入门:从五字段表达式到常见翻车点
在服务器运维里,有一类工作不适合靠人记着:每天凌晨备份数据库、每周清理一次旧日志、每五分钟检查一次服务是否还活着。这类「到点自动执行」的活,Linux 里最常用的工具就是 cron。这篇文章把 cron 的基本用法和几个最常见的翻车点一次讲清。
一、cron 是什么
cron 是一个常驻的守护进程(daemon),它每分钟检查一次任务表,到了设定时间就执行对应的命令。每个用户都有自己的任务表,用 crontab 命令管理:crontab -e 编辑任务表,crontab -l 查看当前任务,crontab -r 删除全部任务(慎用)。
二、五字段表达式
每一行任务由五段时间和一条命令组成:分(0–59)时(0–23)日(1–31)月(1–12)周(0–7,0 和 7 都是周日),再跟要执行的命令。几个常用例子:0 3 * * * 表示每天凌晨 3 点执行;*/5 * * * * 表示每 5 分钟执行一次;0 9 * * 1 表示每周一上午 9 点执行;30 2 1 * * 表示每月 1 号凌晨 2:30 执行。星号表示「任意」,*/n 表示「每隔 n」。刚上手记不住没关系,先从简单表达式练起,写完可以用在线工具校验一遍再上线。
三、最常见的五个翻车点
第一,环境不一样。cron 执行任务时的环境非常干净,交互式终端里有的 PATH 和环境变量这里都没有。命令尽量写绝对路径,比如 /usr/bin/python3,别依赖当前目录。
第二,百分号要转义。在 crontab 里 % 有特殊含义(表示换行),命令里要用日期格式如 date +%F 时,必须写成 date +\%F,否则任务会莫名失败。
第三,没有输出不等于没执行。cron 默认把输出发邮件,多数服务器没配邮件服务,报错就石沉大海。建议统一把输出重定向到日志:命令后面加 >> /var/log/myjob.log 2>&1,出问题先看日志。
第四,时区对不上。服务器时区如果是 UTC,你写的「凌晨 3 点」实际是北京时间上午 11 点。先用 date 命令确认服务器时区,再写表达式。
第五,任务重叠。上一轮还没跑完,下一轮又启动,轻则重复写数据,重则把机器压垮。耗时任务可以加文件锁:flock -n /tmp/myjob.lock 加命令,保证同一时间只跑一个实例。
四、小结
cron 的语法只有一行,难的是把细节抠对:绝对路径、转义百分号、留好日志、确认时区、防重叠。把这五点做成检查清单,新任务上线前过一遍,绝大多数「定时任务没生效」的问题都能提前避免。
- 点赞
- 收藏
- 关注作者
评论(0)