crontab 手册(Ubuntu)
本文以 Ubuntu 为准,介绍
crontab的基本用法。crontab用于配置和管理定时任务(Cron Jobs),可按分钟、小时、日、月、周等周期自动执行命令或脚本。
📌 基本概念
- Cron:Linux 的定时任务守护进程(
cron或crond)。 - crontab:每个用户可拥有一个独立的 cron 任务表(即 cron table),通过
crontab命令管理。 - 用户级任务文件默认存储在
/var/spool/cron/crontabs/(Ubuntu 使用/var/spool/cron/crontabs/用户名)。 - 系统级定时任务位于
/etc/crontab或/etc/cron.d/目录。
⚠️ 普通用户只能管理自己的 crontab,不能直接编辑
/etc/crontab(需 root 权限)。
🔧 常用命令
| 命令 | 作用 | 示例 |
|---|---|---|
crontab -e | 编辑当前用户的定时任务 | crontab -e |
crontab -l | 列出当前用户的定时任务 | crontab -l |
crontab -r | 删除当前用户的所有定时任务(慎用!) | crontab -r |
crontab -u 用户名 -l | (root 专用)查看指定用户的 crontab | sudo crontab -u www-data -l |
💡 编辑时默认使用
$VISUAL或$EDITOR环境变量指定的编辑器(如未设置,通常为nano或vi)。
🕒 Cron 表达式格式
每行一个任务,格式如下:
* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └── 星期几(0-7,0 和 7 均表示周日)
│ │ │ └──── 月份(1-12)
│ │ └────── 日期(1-31)
│ └──────── 小时(0-23)
└────────── 分钟(0-59)常见示例
| 表达式 | 含义 |
|---|---|
0 2 * * * /backup.sh | 每天凌晨 2:00 执行 /backup.sh |
*/5 * * * * /check.sh | 每 5 分钟执行一次 |
0 0 1 * * /monthly.sh | 每月 1 日 00:00 执行 |
30 8 * * 1-5 /work.sh | 工作日(周一至周五)早上 8:30 执行 |
✅ 支持特殊符号:
*(任意)、,(列表)、-(范围)、/(步长)
📝 编写建议
- 使用绝对路径
Cron 环境变量有限,建议命令和脚本使用完整路径:0 1 * * * /usr/bin/python3 /home/user/script.py - 重定向输出(避免邮件堆积)
默认会将命令输出通过邮件发送给用户(若安装了mail系统)。建议重定向:*/10 * * * * /script.sh >> /var/log/script.log 2>&1 # 或静默丢弃: */10 * * * * /script.sh >/dev/null 2>&1 - 测试脚本可执行性
确保脚本具有执行权限:chmod +x /path/to/script.sh
🔍 查看执行日志
Ubuntu 默认将 cron 日志记录在 syslog 中:
# 查看所有 cron 相关日志
sudo grep CRON /var/log/syslog
# 实时跟踪
sudo grep CRON /var/log/syslog | tail -f📌 日志内容示例:
Dec 12 02:00:01 hostname CRON[12345]: (user) CMD (/backup.sh)
⚠️ 注意事项
- 修改 crontab 后无需重启服务,系统会自动加载。
- 若任务未执行,请检查:
- cron 服务是否运行:
sudo systemctl status cron - 脚本路径、权限、依赖环境是否正确
- 是否有输出未处理导致卡住(建议重定向)
- cron 服务是否运行:
crontab -r不可恢复!删除前建议先crontab -l > backup.cron