跳转至

crontab 管理定时任务

概要: 在RockyLinux 8上,学习使用crontab

创建时间: 2023.01.09 22:14:14

更新时间: 2023.07.28 23:11:13

语法

使用格式

Bash
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i]

参数选项

参数 解释
-u user, 指定用户(默认操作的时当前用户crontab文件)
-e edit, 编辑用户crontab文件
-l list, 列出用户crontab文件
-r remove, 删除用户crontab文件
-i interactive, 删除前提示确认
-V version, 显示版本信息

时间语法

Bash
minute hour day month week command
其中command是需要定时执行的命令
时间字段范围

时间字段 数值范围
minute [0, 59]
hour [0, 23]
day [1, 31] 每月的第x天
month [1, 12]
week [0, 6] 每周的第x天,其中0代表星期日

时间特殊字符

特殊字符 意义
星号 * 所有值(示例,当hour位为*时,代表每个小时执行)
逗号 , 列表值(示例,当hour位为3,8,12时,代表在三点、八点、十二点执行)
减号 - 范围值(示例,当hour位为6-12时,代表在六点到十二点之间每小时执行)
正斜杠/ 频率值(示例,当hour位为1-12/2时,代表在一点到十二点之间,每两小时执行一次;当hour位为*/2时,代表每两小时执行一次)

示例

提示

crontab的时间语法正确与否,推荐在Crontab.guru - The cron schedule expression editor上进行在线验证

脚本示例

(1)每3小时重启一次sshd服务

Bash
0 */3 * * * systemctl restart sshd
(2)每周日晚上九点半执行自定义的备份脚本
Bash
30 21 * * 0 /my_scripts/backup.sh
(3)每个月的10号、15号和25号凌晨检查磁盘占用
Bash
0 0 10,15,25 * * df -h >> disk_info.txt
(4)每周工作日的晚上八点半执行发送邮件的Python脚本
Bash
30 20 * * 1-5 python /my_scripts/send_email.py
使用 crontab -e 添加上面4个定时任务后,使用 crontab -l 查看如下
image.png
交互式删除所有已添加的crontab
Bash
crontab -r -i
image.png

配置文件示例

默认的配置文件如下,cat /etc/crontab

Bash
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
image.png
配置文件分为下面两部分
环境变量部分

  1. SHELL 描述任务的执行shell路径
  2. PATH 描述用户搜索可执行文件的路径
  3. MAILTO 描述crond任务执行信息发送给的用户,配置为空表示不发送邮件
  4. HOME 描述执行任务命令时的主目录

任务配置部分参考上一小节的脚本示例

注意事项

及时刷新系统环境

为保证crontab配置中的PATH与系统保持一致,建议在命令前刷新bash环境配置

Bash
* * * * * source $HOME/.bashrc && command

输出重定向

使用下面的方式忽略命令的输出

Bash
* * * * * /bin/date >/dev/null 2>&1

参考