目录
什么是 Crontab
crontab
是 Linux 下用于定时执行任务的重要工具,它通过简单的语法在指定时间周期内执行相关的命令或脚本。以下是一个详细的 crontab
使用教程。
- Crontab(Cron Table) 是 cron 服务的配置文件,定义了一系列时间任务调度。
- Cron 是一种 Linux/Unix 系统的后台程序,用于按照定义的时间周期调用任务。
验证 cron
是否已安装并可用
检查服务状态:
你可以用以下命令确认 crond.service
是否已经安装,并且是可用的 SystemD 服务:
sudo systemctl status crond.service
可能的输出解释:
- 服务正常运行:
● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since ...
- 如果状态是
active (running)
,说明服务已经安装并运行,无需其他操作。
- 如果状态是
- 服务可用但未运行:
● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: inactive (dead)
- 服务处于停止状态,可以通过以下命令启动:
sudo systemctl start crond.service
- 服务处于停止状态,可以通过以下命令启动:
- 服务未启用开机启动: 如果服务未设置为开机启动,请启用它:
sudo systemctl enable crond.service
- 服务未找到: 如果显示如下错误:
说明服务未安装,请参考下面的步骤先安装cronUnit crond.service could not be found.
安装 cronie
(或 crond)
如果服务未安装或某些文件缺失,你可以手动安装 Cron 服务(在 Red Hat 系列中通常为 cronie
软件包)。以下是不同发行版的具体安装方法:
在 CentOS、RHEL、Fedora:
# 安装 Cron 服务(Crond)
sudo yum install cronie
# 启用并启动服务
sudo systemctl enable crond
sudo systemctl start crond
在 Ubuntu/Debian:
虽然这些发行版默认使用 cron.service
,但是确认是否安装:
sudo apt update
sudo apt install cron
然后你可以按照 Ubuntu 的启动方式来运行服务:
sudo systemctl enable cron
sudo systemctl start cron
验证安装是否成功:
重新检查服务状态:
systemctl status crond
Crontab 基本语法
crontab
的语法分为两部分:
- 时间定义(何时执行任务)。
- 命令部分(要执行的任务)。
每一行表示一个独立任务,格式如下:
* * * * * command_to_be_executed
其时间字段从左到右分别表示:
字段 | 取值范围 | 含义 |
---|---|---|
分钟 | 0-59 | 每小时内的第几分钟 |
小时 | 0-23 | 每天的第几个小时 |
日期 | 1-31 | 每月的第几天 |
月份 | 1-12 | 每年的第几个月 |
星期 | 0-7 (0 或 7 都表示星期日) | 每周的第几天 |
- 特殊符号的用法:
*
:任意值。,
:列出多个值(如1,15
表示第 1 分钟和第 15 分钟)。-
:表示范围(如1-5
表示从 1 到 5)。/
:表示步长(如*/2
表示每 2 单位执行一次)。
示例
表达式 | 含义 |
---|---|
0 5 * * * | 每天 05:00 执行任务 |
30 8 * * 1 | 每周一 08:30 执行任务 |
*/10 * * * * | 每 10 分钟执行一次任务 |
0 0 1 * * | 每月 1 日 00:00 执行任务 |
0 8-18/2 * * 1-5 | 周一至周五,08:00-18:00 的每 2 小时执行 |
Crontab 的基本操作
创建/编辑任务
运行以下命令进入编辑模式:
crontab -e
系统会打开一个文本编辑器(默认是 vi
或 nano
),根据需求填写任务规则。例如,添加以下任务:
0 3 * * * /path/to/backup.sh
表示每天凌晨 03:00 执行 backup.sh
脚本。
查看现有任务
查看当前用户的任务列表:
crontab -l
删除所有任务
删除当前用户的所有任务:
crontab -r