linux定时任务核心是crontab,需确保crond服务运行,用crontab -e编辑、-l查看、-r删除;时间格式为“分 时 日 月 周 命令”,命令须用绝对路径、脚本需可执行权限并显式指定shell,输出应重定向日志。

Linux 系统中配置定时任务,核心就是用好 crontab。它不复杂,但细节决定成败——写错一个空格、漏掉用户权限、路径没写全,任务就静默失败。
确认 crond 服务正在运行
crontab 依赖后台守护进程 crond(Ubuntu/Debian 中叫 cron),必须先确保它已启动并开机自启:
- 查看状态:systemctl status crond(CentOS/RHEL)或 systemctl status cron(Ubuntu/Debian)
- 如未运行,执行:systemctl start crond 并启用自启:systemctl enable --now crond
- 注意:修改 crontab 后无需重启服务,cron 进程每分钟自动扫描配置变更
编辑和管理自己的定时任务
普通用户可直接操作自身任务,无需 root 权限(除非要改别人):
- crontab -e:打开编辑器(首次会提示选 nano/vim;新手建议选 nano,保存按 Ctrl+O,退出按 Ctrl+X)
- crontab -l:查看当前所有已设置的行
- crontab -r:彻底删除全部任务(⚠️不可撤销,慎用)
- 每行一条任务,格式固定为:分 时 日 月 周 命令,用空格分隔
掌握时间字段含义与常用写法
顺序是:分钟(0–59)、小时(0–23)、日(1–31)、月(1–12 或 jan–dec)、周(0–7,0 和 7 都是周日):
- 0 3 * * * → 每天凌晨 3 点整
- */10 * * * * → 每 10 分钟一次(不是 * */10,那会每分钟执行!)
- 0 8 * * 1-5 → 工作日早上 8 点
- 30 4 1,15 * * → 每月 1 日和 15 日凌晨 4:30
- 支持英文缩写:0 2 * * mon,wed,fri 表示每周一、三、五凌晨 2 点
让脚本真正可靠执行的关键点
很多任务看似配好了却不运行,问题常出在环境上:
- 命令必须用绝对路径:如 /bin/date、/usr/bin/mysqldump,避免 PATH 不一致
- 脚本需有可执行权限:chmod +x /home/user/backup.sh
- 显式指定 shell 解释器:/bin/bash /home/user/backup.sh,不依赖默认 shell
- 务必重定向输出便于排查:>> /var/log/backup.log 2>&1 把标准输出和错误都记下来
- 完整示例:0 2 * * * /bin/bash /home/admin/daily_backup.sh >> /var/log/backup.log 2>&1











