Linux 定时任务 cron 入门:从五字段表达式到常见翻车点

举报
yd_278701352 发表于 2026/11/04 02:37:46 2026/11/04
【摘要】 在服务器运维里,有一类工作不适合靠人记着:每天凌晨备份数据库、每周清理一次旧日志、每五分钟检查一次服务是否还活着。这类「到点自动执行」的活,Linux 里最常用的工具就是 cron。这篇文章把 cron 的基本用法和几个最常见的翻车点一次讲清。一、cron 是什么cron 是一个常驻的守护进程(daemon),它每分钟检查一次任务表,到了设定时间就执行对应的命令。每个用户都有自己的任务表,用...

在服务器运维里,有一类工作不适合靠人记着:每天凌晨备份数据库、每周清理一次旧日志、每五分钟检查一次服务是否还活着。这类「到点自动执行」的活,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 的语法只有一行,难的是把细节抠对:绝对路径、转义百分号、留好日志、确认时区、防重叠。把这五点做成检查清单,新任务上线前过一遍,绝大多数「定时任务没生效」的问题都能提前避免。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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