概述

crontab 命令是用来定期执行程序的命令,即执行定时任务。

在这里插入图片描述

如要求每天备份一次重要的数据文件,就可以通过该命令来设置定时任务。

语法

该命令的语法如下:

crontab [ -u user ] file
# 或
crontab [ -u user ] { -l | -r | -e }

该命令支持的选项有:

选项说明
-u user用于设定某个用户的定时任务
filefile为命令文件名,表示将file作为crontab的任务列表文件并载入crontab
-e编辑某个用户的定时任务,如不指定用户则表示当前用户
-l显示某个用户的定时任务,如不指定用户则表示当前用户
-r删除某个用户的定时任务,如不指定用户则表示当前用户
-i在除某个用户的定时任务时给确认提示

注:设置定时任务是需要遵循一定格式的。

使用

查看已有的定时任务

通过 -l 选项可以已有的定时任务。

# 语法,查看当前用户已有的定时任务
crontab -l

在这里插入图片描述

编辑定时任务

编辑定时任务需要通过 -e 选项。

# 语法,编辑当前用户的定时任务,即可以新增定时任务
crontab -e

在这里插入图片描述

删除定时任务

通过 -r 选项就可以删除当前用户的所有定时任务了。
在这里插入图片描述

定时任务

crond 服务

crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。默认为启动状态。

注:如果没有安装 crond ,那么在 CentOS 下可以通过 yum -y install crond 进行安装。

而关于查看、启动、关闭 crond 服务的命令如下:

  • 如果是 CentOS 7 及以上版本,可以使用如下命令:
    • systemctl status crond:查看 crond 服务状态。
    • systemctl start crond:启动 crond 服务。
    • systemctl stop crond:关闭 crond 服务。
    • systemctl restart crond:重启 crond 服务。
    • systemctl reload crond:重新载入 crond 服务。

在这里插入图片描述

  • 如果是 CentOS 7 以下的版本,可以使用如下命令:
    • service crond status:查看 crond 服务状态。
    • service crond start:启动 crond 服务。
    • service crond stop:关闭 crond 服务。
    • service crond restart:重启 crond 服务。
    • service crond reload:重新载入 crond 服务。

在这里插入图片描述

任务调度工作分类

在 Linux 中任务调度工作分为两类:系统任务调度和个人任务调度。

  • 系统任务调度

其中系统任务调度就是系统周期性要执行的工作,如将缓存数据写入到硬盘、日志清理等。/etc/crontab 文件就算系统任务调度的配置文件。

在这里插入图片描述

需要系统执行的任务可以写在这个文件中。

  • 个人任务调度

某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

所有用户定义的 crontab 文件(即通过 crontab 命令编辑产生的定时任务生成的文件)都被保存在 /var/spool/cron 目录下,其文件名与用户名一样。

在这里插入图片描述

cron 表达式规则

在定时任务文件(/etc/crontabcrontab -e)中每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。格式如下:minute hour day month week command
在这里插入图片描述

各字段说明如下:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如 month 字段如果是星号 *,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如 “2-6” 表示“2,3,4,5,6
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如 “0-23/2” 表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在 minute 字段,表示每十分钟执行一次。

示例如下:

  • * * * * * date:每分钟执行一次 date 命令。
  • 30 22 * * * systemctl restart sshd:每晚的 22:30 重启 sshd 服务。

与定时任务相关的文件

这里有一些与定时任务相关的文件:

  • /var/log/cron:定时任务执行的日志文件,如果定时任务没有执行成功,可以查看发生了什么以便查找原因。

在这里插入图片描述

  • /etc/crontab:可以配置系统执行的定时任务。

在这里插入图片描述

  • crontab 在 /etc 目录下面存 cron.hourlycron.dailycron.weeklycron.monthlycron.d 五个目录和crontabcron.deny 两个文件。
    • cron.daily 是每天执行一次的任务。
    • cron.weekly 是每个星期执行一次的任务。
    • cron.monthly 是每月执行一次的任务。
    • cron.hourly 是每个小时执行一次的任务。
    • cron.d 是系统自动定期需要做的任务
    • crontab 是设定定时任务执行文件
    • cron.deny 文件就是用于控制不让哪些用户使用 crontab 的功能(区分 cron.allow 文件)

在这里插入图片描述

注:cron.hourlycron.dailycron.weeklycron.monthly 这些子目录里存放了一些脚本,到了 crontab 所指定的时间点,系统就会去执行这些子目录里的脚本。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐