首页/系统/Linux 运维命令速查/crontab 命令:-e/-l/-r/-u
定时任务与计划50 条

crontab 命令:-e/-l/-r/-u

管理当前用户定时任务表的入口:-e 编辑、-l 列出、-r 删除(危险)、-i 交互确认、-u 操作指定用户;改前先导出备份是基本纪律。

Linux 运维命令速查系统更新于 2026-10-13

crontab 是什么

crontab 是 cron 体系中管理「用户任务表」的命令。它本身不是编辑器,而是一个安装器:crontab -e 先打开一份临时副本供你编辑,保存退出时由它做格式校验,通过才写入后台 spool 目录(RHEL 系 /var/spool/cron/用户名,Debian 系 /var/spool/cron/crontabs/用户名)。校验失败会报 errors in crontab file, can't install 并放弃写入,原有任务表不受影响。围绕这份任务表,-l、-e、-r、-i、-u 分别对应读取、编辑、删除、确认删除与代管他人。

基本信息

适用平台Linux 全系(RHEL 系 cronie、Debian 系 vixie-cron);BSD 与 macOS 有同名命令,个别选项语义有差异
命令语法crontab [-u 用户] -l | -e | -r | -i ;crontab [-u 用户] 任务表文件 ;crontab - 从标准输入安装
常用选项-l 列出 / -e 编辑 / -r 删除全部 / -i 删除前交互确认 / -u 指定用户 / - 从标准输入读取
权限要求操作自己的任务表无需 root;-u 指定他人必须 root 或 sudo;能否使用 crontab 受 /etc/cron.allow 与 /etc/cron.deny 控制

典型使用场景

  • 新增例行任务:crontab -e 加一行备份或巡检指令,保存退出即生效,不必重启 cron 服务
  • 迁移服务器:源机 crontab -l > server-a.bak 导出,目标机 crontab server-a.bak 整份导入,避免逐行手抄出错
  • 清理误建任务:先 crontab -l 存档留底,再用 crontab -r 清空,或加 -i 让它逐条确认
  • 代管服务账号:sudo crontab -u www -l 查看 www 用户下的任务,这类任务不会出现在 root 的 crontab -l 里
  • 受控发布:把任务表文件纳入版本管理,用 crontab 文件 一次性安装,替代在多台机器上手工编辑

常用示例

常用示例
crontab -l                    # 列出当前用户的任务表
crontab -l > ~/cron.bak      # 改前导出备份,属于习惯动作
crontab -e                    # 编辑,保存退出时校验并安装
crontab -ri                   # 删除前逐个确认(-i 与 -r 组合)
crontab server-a.bak          # 用文件整份替换当前任务表
crontab - < server-a.bak      # 从标准输入安装,效果同上
sudo crontab -u www -l        # 查看 www 用户的任务表(需 root)

备份与回滚

备份与回滚
# 改动前先留底
crontab -l > /root/cron-$(date +%F).bak
# 改坏了:用备份整份覆盖回去
crontab /root/cron-2026-10-13.bak
# 核对结果是否与备份一致
crontab -l | diff - /root/cron-2026-10-13.bak

选项与风险对照

选项作用风险与提示
-l打印当前用户任务表到标准输出只读,可放心重定向到文件做备份
-e编辑并校验后安装校验不过会拒绝安装,原任务表保留不变
-r删除整张任务表多数实现无提示直接清空,spool 里不留历史版本
-i删除前逐条交互确认多数实现支持,个别系统默认开启,脚本里不要依赖它
-u 用户指定操作对象需 root;用户名写错就会改到别人的任务表
保存后不需要重启服务:cron 守护进程每分钟检查 spool 目录的变化,自动重载被改动的任务表,这就是「保存即生效」的机制。
crontab -e 依赖 EDITOR 或 VISUAL 环境变量:最小化系统里可写 EDITOR=vim crontab -e,或把 export EDITOR=vim 放进 shell 配置长期生效。
crontab -r 与 -u 组合能删掉他人的任务表,而且没有回收站。执行前先 crontab -u 用户 -l > 备份,确认目标用户名再敲回车。

任务表六个字段

字段取值范围说明
分0-59每分钟写 *,每 5 分钟写 */5
时0-23按服务器本地时区解释,不是 UTC
日1-31与周字段不要同时限定,否则范围会被放大
月1-12可用英文缩写 jan-dec
周0-70 与 7 都表示周日
命令任意命令行百分号有特殊含义,需要转义成反斜杠加百分号

常见时间写法

  • 每 5 分钟一次:星号斜杠 5 开头,分字段写成 */5,其余为星号
  • 每天凌晨 2 点:分写 0、时写 2,其余为星号
  • 每周日 3 点:再在周字段写 0,注意不要同时填日字段
  • 字符串写法:@daily、@weekly、@monthly、@reboot 比五段式更易读,支持程度以发行版实现为准
  • 日与周同时指定时,多数实现按「满足其一即触发」处理,等于执行范围被放大
任务按系统本地时区执行,跨机房机器时区不一致时,同一条任务会在不同时刻触发;容器里还要再确认容器自身的时区,否则出现「宿主机对了、容器慢 8 小时」的偏差。
输出去向:cron 会把任务的标准输出与错误输出以邮件发给任务所有者,多数机器没有可用的本地邮件系统,输出就这样被丢弃。脚本里一律显式重定向到日志文件,排查时才有据可依。

易错点

  • 无 EDITOR 的最小化环境下执行 crontab -e 可能直接进 vi 或报错退出,先把编辑器定下来
  • crontab -r 无二次确认:误删后 spool 目录不留历史,只能靠事先导出的备份恢复
  • 用 crontab 文件 安装是整份替换而非追加,导入前务必先备份当前任务表
  • 任务表字段比 /etc/crontab、/etc/cron.d 少一个用户字段,两边内容互相复制会多写或少写一列
  • 在 Windows 上编辑过再上传的任务表可能带 CRLF 或 BOM,cron 会报格式错误或静默不执行

数据来源与参考

  • man 1 crontab(cronie 与 Debian cron)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌