Crontab 编辑器
Crontab 表达式
Crontab 解析器
表达式描述:无
执行时间:无
Crontab 命令详解
参数说明
crontab 命令的常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-e |
编辑当前用户的 crontab 文件 | crontab -e |
-l |
列出当前用户的 crontab 内容 | crontab -l |
-r |
删除当前用户的 crontab 文件(不提示确认) | crontab -r |
-i |
交互式删除,删除前会提示确认(通常与 -r 一起使用) |
crontab -ri |
-u |
指定用户(需要 root 权限),用于查看或编辑其他用户的 crontab | crontab -u username -l |
file |
从指定文件安装 crontab(不使用 - 参数时) |
crontab myjobs.txt |
格式说明
Crontab 表达式由6个字段组成,用空格分隔:
分钟 小时 日期 月份 星期 命令
字段说明
| 字段 | 取值范围 | 说明 |
|---|---|---|
| 分钟 | 0-59 | 每小时的第几分钟执行 |
| 小时 | 0-23 | 每天的第几小时执行 |
| 日期 | 1-31 | 每月的第几天执行 |
| 月份 | 1-12 | 每年的第几月执行 |
| 星期 | 0-7 | 每周的第几天执行(0和7都表示周日) |
| 命令 | - | 要执行的命令或脚本路径 |
特殊字符
- *:匹配所有可能的值(如分钟字段的 * 表示每分钟)
- -:指定范围(如 1-5 表示1到5)
- ,:指定列表(如 1,3,5 表示1、3、5)
- /:指定步进值(如 */5 表示每5个单位,0-10/2 表示0到10之间每2个单位)
常用示例
| 表达式 | 说明 |
|---|---|
0 2 * * * /backup.sh |
每天凌晨2点执行 |
*/5 * * * * /check.sh |
每5分钟执行一次 |
0 9 * * 1 /weekly.sh |
每周一上午9点执行 |
0 0 1 * * /monthly.sh |
每月1号凌晨执行 |
0 12 * * 1-5 /workday.sh |
工作日上午12点执行 |
0 0 * * 0 /weekly.sh |
每周日凌晨执行 |
注意事项
- 使用绝对路径:命令和脚本必须使用绝对路径,因为 cron 执行时的环境变量 PATH 可能不包含常用目录。例如使用
/usr/bin/python3而不是python3,使用/home/user/script.sh而不是./script.sh。 - 设置环境变量:如果命令依赖特定的环境变量,需要在 crontab 中显式设置。可以在命令前添加环境变量,例如:
PATH=/usr/local/bin:/usr/bin:/bin或0 2 * * * PATH=/usr/local/bin:$PATH /path/to/script.sh。 - 重定向输出:建议将输出重定向到日志文件,便于排查问题。例如:
0 2 * * * /backup.sh >> /var/log/backup.log 2>&1(>>表示追加,2>&1表示将错误输出也重定向到同一文件)。 - 处理路径中的空格:如果路径或命令中包含空格,必须用引号括起来。例如:
0 2 * * * "/path/to/my script.sh"或0 2 * * * /usr/bin/python3 "/home/user/my script.py"。 - 脚本执行权限:确保脚本文件具有执行权限(
chmod +x script.sh)。如果使用解释器执行,可以写成/bin/bash /path/to/script.sh或/usr/bin/python3 /path/to/script.py。 - 工作目录:cron 执行时的工作目录通常是用户主目录,如果脚本依赖特定目录,需要在命令中切换目录或使用绝对路径。例如:
0 2 * * * cd /path/to/work && ./script.sh。 - 避免交互式命令:cron 执行时没有终端,无法进行交互。避免使用需要用户输入的命令,或使用非交互式选项(如
apt-get install -y)。 - 时间同步:确保系统时间准确,cron 依赖系统时钟。建议使用 NTP 服务同步时间。
- 测试命令:在添加到 crontab 之前,先在命令行手动测试命令是否能正常执行,确保路径和权限都正确。
- 日志记录:对于重要任务,建议同时记录成功和失败的日志,便于监控和排查。例如:
0 2 * * * /backup.sh >> /var/log/backup.log 2>&1 || echo "$(date): Backup failed" >> /var/log/backup.error.log。