概述
crontab
命令是用来定期执行程序的命令,即执行定时任务。
如要求每天备份一次重要的数据文件,就可以通过该命令来设置定时任务。
语法
该命令的语法如下:
crontab [ -u user ] file
# 或
crontab [ -u user ] { -l | -r | -e }
该命令支持的选项有:
选项 | 说明 |
---|---|
-u user | 用于设定某个用户的定时任务 |
file | file为命令文件名,表示将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/crontab
或 crontab -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.hourly
、cron.daily
、cron.weekly
、cron.monthly
、cron.d
五个目录和crontab
、cron.deny
两个文件。cron.daily
是每天执行一次的任务。cron.weekly
是每个星期执行一次的任务。cron.monthly
是每月执行一次的任务。cron.hourly
是每个小时执行一次的任务。cron.d
是系统自动定期需要做的任务crontab
是设定定时任务执行文件cron.deny
文件就是用于控制不让哪些用户使用 crontab 的功能(区分cron.allow
文件)
注:
cron.hourly
、cron.daily
、cron.weekly
、cron.monthly
这些子目录里存放了一些脚本,到了 crontab 所指定的时间点,系统就会去执行这些子目录里的脚本。