Linux crontab 定时任务入门:让脚本每天自动跑

举报
yd_227985793 发表于 2026/11/08 19:38:57 2026/11/08
【摘要】 你是不是也有这样的需求:数据库每天凌晨备份一次、日志每天早上清理一次、某个脚本每五分钟同步一份数据。总不能自己定闹钟半夜爬起来敲命令吧?crontab 就是 Linux 里干这事的"自动闹钟"。 一、crontab 是什么crontab 是 Linux/Unix 系统内置的定时任务工具。每个用户都可以维护自己的一份任务清单(叫"crontab 文件"),系统里的 cron 守护进程会每分钟检...

你是不是也有这样的需求:数据库每天凌晨备份一次、日志每天早上清理一次、某个脚本每五分钟同步一份数据。总不能自己定闹钟半夜爬起来敲命令吧?crontab 就是 Linux 里干这事的"自动闹钟"。

一、crontab 是什么

crontab 是 Linux/Unix 系统内置的定时任务工具。每个用户都可以维护自己的一份任务清单(叫"crontab 文件"),系统里的 cron 守护进程会每分钟检查一遍清单,到点了就自动执行对应的命令。它不需要额外安装,绝大多数发行版都自带,是运维自动化的入门必修课。

二、三个最常用的命令

crontab -e    # 编辑我的定时任务(首次会让你选编辑器,选 vim 即可)
crontab -l    # 列出我当前的所有任务
crontab -r    # 删除我的全部任务(慎用!没有二次确认)

注意:crontab 是按用户隔离的。root 用 crontab -e 写的任务和普通用户写的互不干扰。

三、五个时间字段

每条任务一行,格式是"五个时间字段 + 要执行的命令":

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

几个高频写法:

表达式 含义
0 2 * * * 每天凌晨 2:00
*/5 * * * * 每 5 分钟
0 9-18 * * * 每天 9 点到 18 点的整点
0 0 * * 1 每周一零点
30 8 1 * * 每月 1 号早上 8:30

四、实战:每天凌晨备份数据库

先写一个备份脚本 /home/dev/backup.sh:

#!/bin/bash
mysqldump -u root -p'你的密码' mydb > /backup/mydb_$(date +\%Y\%m\%d).sql
find /backup -name "mydb_*.sql" -mtime +7 -delete   # 只保留最近 7 天

然后 crontab -e 加一行:

0 2 * * * /home/dev/backup.sh >> /home/dev/backup.log 2>&1

这行的意思是:每天凌晨 2 点执行备份脚本,标准输出和错误输出都追加写进 backup.log。给任务配日志是个好习惯,不然任务没跑成功你都不知道。

五、新手必踩的四个坑

1. 百分号要转义。 在 crontab 里 % 是特殊字符(表示换行),所以命令里的日期格式必须写成 %Y%m%d,否则日期部分会出错。

2. 环境变量和你想的不一样。 cron 执行任务时用的是精简版环境变量,PATH 里往往没有 /usr/local/bin。最稳的办法是命令一律写绝对路径,或者在脚本开头自己 export PATH。

3. 改完不生效? 用 crontab -l 确认保存成功。另外检查 cron 服务是否在跑:systemctl status crond(Debian/Ubuntu 系统叫 cron)。

4. 周和日"同时"指定是"或"不是"与"。 0 0 1 * 1 表示"每月 1 号零点或每个周一零点",不是"既是 1 号又是周一才执行"。想要"且"的逻辑,把判断写进脚本里。

六、小结

crontab 的精髓就一句话:把"到点要做的事"交给系统,而不是靠人。掌握 crontab -e/-l、五个时间字段、绝对路径和日志重定向这几点,日常 90% 的定时需求都能覆盖了。更复杂的场景(任务依赖、失败重试、分布式调度)再考虑 Jenkins、Airflow 这类专业工具不迟。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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