【Crontab】一文掌握 Crontab 指令详细用法(Crontab 备忘速查)

Cron 最适合安排重复性任务。 可以使用关联的 at 实用程序来完成一次性任务的调度。

参考:

Crontab 格式

格式

Min  Hour Day  Mon  Weekday
分钟  小时  天   月   周

*    *    *    *    *   <要执行的命令>
┬    ┬    ┬    ┬    ┬
│    │    │    │    └─  星期几         (0=周日 .. 6=星期六)
│    │    │    └──────  月            (1..12)
│    │    └───────────  月份中的某天    (1..31)
│    └────────────────  小时           (0..23)
└─────────────────────  分钟           (0..59)

字段范围特殊字符
分钟 Minute0 - 59, - * /
小时 Hour0 - 23, - * /
月份中的某天1 - 31, - * ? / L W
月 Month1 - 12, - * /
星期几0 - 6, - * ? / L #
年 Year1970–2099, -

示例

ExampleDescription
*/15 * * * *每 15 分钟
0 * * * *每隔一小时
0 */2 * * *每 2 小时
15 2 * * *每天凌晨 2 点 15 分
15 2 * * ?每天凌晨 2 点 15 分
10 9 * * 5每周五上午 9:10
0 0 * * 0每个星期日的午夜
15 2 * * 1L每月最后一个星期一凌晨 2 点 15 分
15 0 * * 4#2每个月的第二个星期四早上 00:15
0 0 0 1 * *每个月的 1 日(每月)
0 0 0 1 1 *每年 1 月 1 日(每年)
@reboot每次重启 (非标准)

特殊字符串

特殊字符串意义
@reboot运行一次,在系统启动时 (非标准)
@yearly每年运行一次,“0 0 1 1 *” (非标准)
@annually(与@yearly 相同)(非标准)
@monthly每月运行一次,“0 0 1 * *” (非标准)
@weekly每周运行一次,“0 0 * * 0” (非标准)
@daily每天运行一次,“0 0 * * *” (非标准)
@midnight(与@daily 相同)(非标准)
@hourly每小时运行一次,“0 * * * *” (非标准)

Crontab 命令

--
crontab -e如果不存在,则编辑或创建一个 crontab 文件
crontab -l显示 crontab 文件
crontab -r删除 crontab 文件
crontab -v显示您上次编辑 crontab 文件的时间 (非标准)

轻松添加任务

echo "@reboot echo hi" \| crontab

特殊字符

特殊字符说明
星号(*)匹配字段中的所有值或任何可能的值。
横杆(-)用于定义范围。例如:第 5 个字段(星期几)中的 1-5 每个工作日,即星期一到星期五
斜线 (/)第一个字段(分钟)/15 表示每十五分钟或范围的增量。
逗号(,)用于分隔项目。例如:第二个字段(小时)中的 2、6、8 在凌晨 2 点、早上 6 点和早上 8 点执行
L仅允许用于 月份中的某天星期几 字段,星期几 中的 2L 表示每个月的最后一个星期二
井号 (#)仅允许用于 星期几 字段,后面必须在 1 到 5 的范围内。例如,4#1 表示给定月份的“第一个星期四”。
问号(?)可以代替“*”并允许用于月份和星期几。使用仅限于 cron 表达式中的 月份中的某天星期几

Crontab 是 Linux/Unix 系统中用于设置周期性执行任务的工具,下面详细介绍如何使用 crontab 添加和管理定时任务。

1. 基本操作命令

查看当前用户的定时任务

crontab -l

编辑定时任务

crontab -e

删除所有定时任务

crontab -r

删除特定用户的定时任务(需要 root 权限)

crontab -r -u username

2. Crontab 时间格式

Crontab 时间格式由 5 个时间字段组成,格式如下:

* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── 星期几 (0 - 6) (0 表示星期日)
│ │ │ └──── 月份 (1 - 12)
│ │ └────── 日 (1 - 31)
│ └──────── 小时 (0 - 23)
└────────── 分钟 (0 - 59)

3. 常用时间设置示例

示例说明
* * * * *每分钟执行一次
*/5 * * * *每5分钟执行一次
0 * * * *每小时执行一次(整点)
0 0 * * *每天午夜执行
0 9 * * 1-5工作日早上9点执行
30 8 1 * *每月1日上午8:30执行
0 20 * * 6每周六晚上8点执行
0 0 1 1 *每年1月1日午夜执行
@reboot系统启动时执行
@daily0 0 * * *每天执行一次
@hourly0 * * * *每小时执行一次

4. 实际添加任务示例

示例1:每天凌晨3点执行备份脚本

0 3 * * * /home/user/scripts/backup.sh

示例2:每30分钟执行一次Python脚本

*/30 * * * * /usr/bin/python3 /home/user/scripts/monitor.py

示例3:每周一至周五上午9:15发送邮件

15 9 * * 1-5 /usr/bin/php /var/www/send_report.php

5. 环境变量和路径问题

由于 cron 的环境与用户环境不同,建议:

  1. 使用绝对路径
  2. 在脚本中设置必要的环境变量
  3. 或者直接在crontab中定义环境变量
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 * * * * /path/to/command

6. 输出重定向

默认情况下,cron 会通过邮件发送任务输出,可以重定向输出:

# 将输出重定向到文件
0 * * * * /path/to/command > /var/log/command.log 2>&1

# 丢弃所有输出
0 * * * * /path/to/command > /dev/null 2>&1

7. 特殊字符转义

如果命令中包含特殊字符(如%),需要进行转义:

0 1 * * * touch /tmp/example_$(date +\%Y\%m\%d).log

8. 检查 cron 日志

查看 cron 执行记录(日志位置可能因系统而异):

# Ubuntu/Debian
grep CRON /var/log/syslog

# CentOS/RHEL
grep CRON /var/log/cron

9. 系统级 crontab

系统级 crontab 位于 /etc/crontab/etc/cron.d/ 目录,格式略有不同,需要指定用户:

# /etc/crontab 格式
* * * * * username command_to_execute

10. 最佳实践

  1. 每个任务添加注释说明
  2. 复杂的任务逻辑写在脚本中,cron只调用脚本
  3. 测试时可以先设置每分钟执行一次,确认无误后再调整时间
  4. 重要的任务添加错误处理机制
  5. 记录任务执行日志

11. 实际案例

完整的 crontab 示例文件

# 设置环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 每天凌晨3点执行数据库备份
0 3 * * * /home/user/scripts/db_backup.sh > /var/log/db_backup.log 2>&1

# 每30分钟检查一次服务器状态
*/30 * * * * /usr/bin/python3 /home/user/scripts/server_monitor.py

# 每周一早上8点清理临时文件
0 8 * * 1 /bin/rm -rf /tmp/*

# 每月1日午夜生成月度报告
0 0 1 * * /usr/bin/php /var/www/generate_monthly_report.php

通过以上方法,您可以有效地使用 crontab 来管理各种定时任务。

资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 Linux 系统中,crontab 是一款功能强大的定时任务调度工具,它借助后台运行的 cron 守护进程来按照预设的时间计划执行指定的命令或脚本。接下来,我们将详细探讨 crontab 的使用方法、配置文件位置以及权限管理等内容。 首先,cron 服务是 Linux 系统中用于控制定时任务的核心部分。可以通过以下命令来管理 cron 服务:service crond start 用于启动服务,service crond stop 用于停止服务,service crond restart 用于重启服务,service crond reload 用于重新加载服务配置,service crond status 用于查看服务状态。 cron 服务会从多个位置读取配置文件。/var/spool/cron/ 目录存放着每个用户的 crontab 任务文件,文件名以创建任务的用户名命名,比如用户 tom 的任务文件就是 /var/spool/cron/tom。/etc/crontab 是系统级的 crontab 配置文件,通常由系统管理员设置一些维护任务等。/etc/cron.d/ 目录可以放置额外的 crontab 文件或脚本供系统执行。 对于 /etc/crontab 文件,其中的 MAILTO=root 表示当该文件中的任务出错时,错误信息会发送到指定的邮箱,默认是 root,但一般会修改为管理员的邮箱地址。像 01 * * * * root run-parts /etc/cron.hourly 这行配置意味着每小时的第 1 分钟,cron 会以 root 用户身份运行 /etc/cron.hourly 目录下所有可执行文件,同理,还有 /etc/cron.daily、/etc/cron
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值