Crontab 是 Linux 系统自带的定时任务工具,可以按照设定的时间自动执行脚本或命令。在搬瓦工VPS上,常见的使用场景包括自动备份数据库、定期清理日志、SSL证书续期、监控脚本定时运行等。本文从基础语法到实战配置,全面讲解 crontab 的使用方法。
crontab 的管理命令只有几条,记住即可:
| 命令 | 说明 |
|---|---|
crontab -e | 编辑当前用户的定时任务 |
crontab -l | 查看当前用户的定时任务列表 |
crontab -r | 删除当前用户的全部定时任务(慎用) |
crontab -u username -e | 编辑指定用户的定时任务(需root权限) |
首次执行 crontab -e 时,系统会提示选择编辑器。推荐选择 nano(对新手更友好),也可以选择 vim。编辑保存后,定时任务立即生效,无需重启服务。
每行定时任务由时间表达式和要执行的命令组成,格式如下:
* * * * * command 分 时 日 月 周 要执行的命令
五个时间字段的含义:
| 字段 | 取值范围 | 说明 |
|---|---|---|
| 分钟 | 0-59 | 每小时的第几分钟 |
| 小时 | 0-23 | 每天的第几小时(24小时制) |
| 日期 | 1-31 | 每月的第几天 |
| 月份 | 1-12 | 每年的第几个月 |
| 星期 | 0-7 | 星期几(0和7都表示星期日) |
特殊字符说明:
* 表示任意值(每分/每时/每天...), 表示列举多个值,如 1,3,5- 表示范围,如 1-5 表示1到5/ 表示步长,如 */5 表示每隔5个单位以下是日常管理中最常用的定时模式:
| 表达式 | 含义 | 使用场景 |
|---|---|---|
* * * * * | 每分钟执行 | 高频监控脚本 |
*/5 * * * * | 每5分钟执行 | 服务状态检测 |
0 * * * * | 每小时整点执行 | 日志统计 |
0 2 * * * | 每天凌晨2点执行 | 数据库备份 |
0 0 * * 0 | 每周日零点执行 | 周报生成 |
0 3 1 * * | 每月1号凌晨3点执行 | 月度清理 |
30 4 * * 1-5 | 工作日4:30执行 | 工作日定时任务 |
0 2 1,15 * * | 每月1号和15号凌晨2点 | 半月备份 |
0 0 * * * | 每天零点执行 | 日志切割 |
@reboot | 系统启动时执行一次 | 开机自启脚本 |
运行 crontab -e 后,添加以下内容:
1. 每天凌晨3点备份MySQL数据库:
0 3 * * * mysqldump -u root -p'yourpassword' mydb > /backup/mydb_$(date +\%Y\%m\%d).sql
2. 每小时清理超过7天的日志文件:
0 * * * * find /var/log/myapp/ -name "*.log" -mtime +7 -delete
3. 每5分钟检查Nginx是否运行,停止则自动重启:
*/5 * * * * pgrep nginx > /dev/null || systemctl start nginx
4. 每天凌晨1点自动续期Let's Encrypt证书:
0 1 * * * certbot renew --quiet && systemctl reload nginx
5. 每周日凌晨将网站目录打包备份:
0 4 * * 0 tar -czf /backup/www_$(date +\%Y\%m\%d).tar.gz /var/www/html
cron任务的输出默认会以邮件形式发送给用户。在VPS上通常不需要这个功能,应将输出重定向到日志文件或丢弃。
将输出保存到日志文件:
0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1
其中 >> 表示追加写入,2>&1 表示将标准错误也重定向到同一文件。
完全丢弃输出:
0 3 * * * /root/backup.sh > /dev/null 2>&1
仅保留错误信息:
0 3 * * * /root/backup.sh > /dev/null 2>> /var/log/backup_error.log
/usr/bin/python3 而非 python3)。或者在 crontab 开头声明:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin% 有特殊含义(换行符),使用 date 命令时需要用反斜杠转义:\%Y\%m\%dchmod +x /root/backup.shtimedatectl,设置为北京时间:timedatectl set-timezone Asia/Shanghai任务不执行的排查步骤:
systemctl status cron(Ubuntu/Debian)或 systemctl status crond(CentOS)grep CRON /var/log/syslog(Ubuntu)或 cat /var/log/cron(CentOS)cron 服务管理:
# Ubuntu/Debian systemctl start cron systemctl enable cron # CentOS systemctl start crond systemctl enable crond
Tip: 购买搬瓦工VPS时使用优惠码 NODESEEK2026 可享 6.77% 折扣,详见优惠码使用教程。更多教程请查看新手教程。