banner
约 1,200 字
4 分钟

crontab 定时任务教程:让命令到点自动执行

摘要

cron 是 Linux/macOS 上最常用的定时任务工具,可以让命令在指定时间自动执行。本教程依据 crontab(5) 官方手册,详细介绍 crontab 的编辑与查看、cron 表达式的五字段格式、特殊符号(* , - /)与快捷写法(@daily 等),并结合 rsync 实现全自动备份。

crontab 定时任务教程:让命令到点自动执行

cron 是 Linux/macOS 上最常用的定时任务工具,可以让你设置在某个固定时间自动执行的命令或脚本,比如每天凌晨备份数据库、每周清理日志、定时同步文件等。

本文内容依据 crontab 官方手册(crontab(5))整理。

一、cron 是什么

cron 是一个后台守护进程(daemon),它会按照你配置的时间表,周期性地去执行任务。与之配套的有两个关键概念:

  • crontab:存放每个用户定时任务表的文件,也是管理这些任务的命令名

  • cron 表达式:用来描述"什么时候执行"的语法

二、基本用法

查看当前用户的定时任务:

bash
crontab -l

编辑(创建/修改)当前用户的定时任务:

bash
crontab -e

第一次执行 crontab -e 会让你选择一个编辑器(通常是 nano 或 vim)。

删除当前用户的所有定时任务(慎用):

bash
crontab -r

管理 root 的任务需要加 sudosudo crontab -e 编辑的是 root 的定时任务表。

三、cron 表达式的格式

cron 表达式由5 个时间字段 + 1 个命令组成,每行一条任务:

纯文本
分 时 日 月 星期  要执行的命令

5 个时间字段依次为:

字段

含义

取值范围

第 1 个

分钟

0 - 59

第 2 个

小时

0 - 23

第 3 个

1 - 31

第 4 个

1 - 12

第 5 个

星期

0 - 7(0 和 7 都代表周日)

常见的写法

bash
# 每天 0 点 5 分执行备份脚本
5 0 * * * /home/user/backup.sh

# 每周日凌晨 3 点执行
0 3 * * 0 /home/user/weekly.sh

# 每个小时执行一次(第 0 分钟)
0 * * * * /home/user/hourly.sh

# 每 5 分钟执行一次(分字段用 */5)
*/5 * * * * /home/user/every5min.sh

# 每月 1 号凌晨 2 点 30 分执行
30 2 1 * * /home/user/monthly.sh

四、特殊符号

符号

含义

示例

*

任意值,每个都匹配

* 在小时字段 = 每小时

,

列举多个值

1,15,30 = 第 1、15、30 分钟

-

区间

1-5 = 1 到 5

/

步进

*/5 = 每 5 个单位

组合示例:

bash
# 工作日(周一到周五)上午 9 点执行
0 9 * * 1-5 /home/user/workday.sh

# 每小时的第 10、30、50 分钟执行
10,30,50 * * * * /home/user/three_times.sh

# 每 2 小时执行一次
0 */2 * * * /home/user/every2hours.sh

五、几个常用的快捷写法

除了 5 字段表达式,cron 还提供了一些预定义的关键词(部分系统支持):

快捷词

等价表达式

含义

@hourly

0 * * * *

每小时

@daily

0 0 * * *

每天

@weekly

0 0 * * 0

每周

@monthly

0 0 1 * *

每月

@reboot

开机时执行

示例:

bash
@daily /home/user/backup.sh
@reboot /home/user/start_service.sh

六、注意事项

  1. 路径要写绝对路径:cron 执行时的环境变量和普通登录 shell 不同,PATH 可能非常有限,所以命令里的脚本、程序最好写成绝对路径,例如用 /usr/bin/python3 而不是 python3

  2. 命令要能静默执行:cron 没有交互终端,命令里不能有需要手动确认的交互操作。

  3. 日志输出:默认情况下 cron 会把输出通过邮件发给用户。如果想关掉,可以在命令末尾重定向:

    bash
    0 3 * * * /home/user/backup.sh > /dev/null 2>&1

    这样标准输出和错误输出都被丢弃。更推荐的做法是重定向到日志文件:

    bash
    0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
  4. 修改后自动生效:用 crontab -e 保存后不需要重启服务,任务立刻生效。

  5. 脚本要有执行权限:如果写的是 .sh 脚本,记得 chmod +x backup.sh

七、配合 rsync 做自动备份

结合上一篇 rsync 教程,可以轻松实现定时自动备份。例如每天凌晨 2 点把文档目录同步到备份盘:

bash
crontab -e
# 添加这一行:
0 2 * * * rsync -avhP --delete ~/Documents/ /media/backup/Documents/ >> /var/log/backup.log 2>&1

八、总结

需求

cron 表达式

每天某时刻

分 时 * * *

每周某天某时刻

分 时 * * 星期

每月某天某时刻

分 时 日 * *

每 N 分钟

*/N * * * *

每 N 小时

0 */N * * *

cron 表达式其实只需要记住"分、时、日、月、星期"这个顺序,再结合 *,-/ 四个符号就能应对绝大多数定时需求。配合 rsync、脚本等工具,就能搭建出全自动的备份与维护系统。

END

相关文章

暂无相关文章