Cron定时任务
约 712 字大约 2 分钟
2026-08-29
Cron 是 Linux 自带的定时任务服务,适合做数据库备份、日志清理、定时重启服务等周期性工作。本文介绍任务的配置方法与常见问题。
基本用法
# 编辑当前用户的定时任务(首次会让你选择编辑器,选 vim 基础即可)
crontab -e
# 查看当前任务
crontab -l
# 编辑 root 的任务(配合 sudo)
sudo crontab -e时间表达式
每行任务由「时间表达式 + 命令」组成,五个字段依次为:
| 字段 | 含义 | 取值 |
|---|---|---|
| 第 1 位 | 分钟 | 0-59 |
| 第 2 位 | 小时 | 0-23 |
| 第 3 位 | 日 | 1-31 |
| 第 4 位 | 月 | 1-12 |
| 第 5 位 | 星期 | 0-7(0 和 7 都是周日) |
特殊符号:* 任意值、*/n 每隔 n、a-b 范围、a,b,c 枚举。
常用示例:
*/5 * * * * 命令 # 每 5 分钟
0 3 * * * 命令 # 每天凌晨 3 点
0 */2 * * * 命令 # 每 2 小时
30 4 * * 1 命令 # 每周一 4:30
0 0 1 * * 命令 # 每月 1 日 0 点在线验证
表达式写不准时,可先用 crontab.guru 等在线工具验证含义,避免任务按错误周期执行。
典型场景示例
每天凌晨 3 点备份数据库
0 3 * * * mysqldump -u root -p'密码' --all-databases | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz每周清理 7 天前的日志
0 4 * * 0 find /var/log/myapp -name "*.log" -mtime +7 -delete定时重启服务(如凌晨 5 点重启应用)
0 5 * * * systemctl restart myapp两个必知细节
%必须转义:crontab 中%有特殊含义,日期格式化要写成\%Y\%m\%d(见上方备份示例)。- 环境变量精简:cron 执行时不加载您的 shell 配置,
PATH很短。命令请使用绝对路径(如/usr/local/bin/xxx),或在一行任务前先写PATH=/usr/local/sbin:/usr/bin:/bin。
查看执行情况
# Debian / Ubuntu 的执行日志
grep CRON /var/log/syslog
# CentOS / Rocky 的执行日志
grep CRON /var/log/cron
# 手动验证脚本可执行(cron 失败最常见原因)
/bin/bash /path/to/your-script.sh备份类任务请验证恢复
定时备份建立后,务必做一次「用备份文件恢复到测试目录」的演练,确认备份可用。配合磁盘检查避免备份写满磁盘,参见Linux资源查看基础命令中的 df -h。
常见问题
任务到点没执行?
crontab -l确认任务存在、表达式正确。- 查看系统日志确认 cron 是否触发。
- 手动以同样方式执行命令,多数是路径或环境变量问题。
时间对不上?
先核对服务器时区:timedatectl。以 UTC 计算的实例可执行 sudo timedatectl set-timezone Asia/Shanghai 后再配置任务。
如何把输出记到文件方便排查?
在命令后追加 >> /var/log/mytask.log 2>&1,成功与报错都会写入日志。
