> 凌晨 3 点自动备份数据库、每小时检查网站是否在线、每天早上给自己发一封服务器状态邮件——这些都可以用 crontab 定时任务来实现。它是 Linux 上最常用、最简单的自动化工具。
---
## crontab 是什么?
crontab 是 Linux 系统自带的任务调度器,可以按照设定的时间周期自动执行命令或脚本。无需额外安装,系统原生支持。
---
## 基本语法
```
分 时 日 月 星期 要执行的命令
* * * * * command
```
| 字段 | 取值范围 |
|------|---------|
| 分钟 | 0-59 |
| 小时 | 0-23 |
| 日期 | 1-31 |
| 月份 | 1-12 |
| 星期 | 0-7(0和7都是周日) |
---
## 常用时间设置
```bash
# 每分钟执行
* * * * * command
# 每天凌晨 3 点
0 3 * * * command
# 每周一早上 9 点
0 9 * * 1 command
# 每月 1 号凌晨
0 0 1 * * command
# 工作日每小时
0 * * * 1-5 command
# 每 10 分钟
*/10 * * * * command
# 每天的 9、12、15、18、21 点
0 9,12,15,18,21 * * * command
```
---
## 如何编辑和使用
```bash
crontab -e # 编辑当前用户的定时任务
crontab -l # 查看当前用户的定时任务列表
crontab -r # 删除所有定时任务(慎用!)
```
---
## 实用案例
### 1. 定时备份数据库
```bash
0 3 * * * /opt/backup_db.sh >> /var/log/backup.log 2>&1
```
每天凌晨 3 点执行备份脚本。
### 2. 定时清理日志
```bash
0 4 * * 0 find /var/log -name "*.log" -mtime +30 -delete
```
每周日凌晨 4 点删除 30 天前的日志。
### 3. 网站健康检查
```bash
*/5 * * * * curl -s https://blog.example.com > /dev/null || echo "Site down!" | mail -s "Alert" [email protected]
```
每 5 分钟检查一次网站。
### 4. SSL 证书自动续期
```bash
0 2 * * 1 certbot renew --quiet
```
---
## 常见问题
**Q:为什么我的定时任务不执行?**
1. 检查 crontab 语法是否正确:分 时 日 月 星期
2. 使用绝对路径,比如用 /usr/bin/python3 而不是 python3
3. 脚本要有执行权限:chmod +x script.sh
4. 查看系统日志排查:grep CRON /var/log/syslog
**Q:环境变量不一样怎么办?**
crontab 的环境变量和登录 shell 不同。可以在 crontab 文件开头设置:
```bash
PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash
HOME=/root
0 3 * * * /opt/backup.sh
```
---
crontab 就是你服务器上的闹钟。花 5 分钟学会,以后备份、清理、监控这些重复劳动都不用自己动手了。