VPN技术 · 2023年11月10日 0

使用crontab定时执行脚本的方法

使用crontab命令定时执行脚本的方法

crontab命令详解

crontab命令在Unix和Linux操作系统中被广泛使用,用于设定定时执行的任务。该命令从标准输入读取指令,并将其存储在“crontab”文件中,以便后续执行。

在Linux环境下,任务调度主要分为两大类:第一类是系统自动执行的任务,如定期备份数据和清理缓存;第二类是用户自定义的任务,例如每隔10分钟检查邮件服务器的新邮件,这些任务可以由用户自行设定。

一、/etc/crontab、/etc/cron.deny和/etc/cron.allow文件说明

系统调度任务通常存储在/etc/crontab文件中,该文件包含了系统的调度程序。可以通过以下命令查看其内容:


使用crontab定时执行脚本的方法
[[email protected] ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/  # 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

使用crontab定时执行脚本的方法

这些任务在系统启动后会自动调度执行。此外,/etc目录下还包括/etc/cron.deny和/etc/cron.allow文件。

/etc/cron.deny文件列出不允许使用crontab命令的用户。

/etc/cron.allow文件列出允许使用crontab命令的用户。

当这两个文件同时存在时,以/etc/cron.allow为准。

如果两个文件都不存在,只有root用户可以安排任务。

二、crontab命令的语法及参数解析

crontab命令的基本语法为:

 crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]

需要注意的是,crontab用于设定程序在特定时间或间隔执行,类似于用户的日程表。-u user参数用于指定某个用户的日程表,前提是你必须拥有相应权限(例如,root用户)。如果不带-u user,则表示设置自己的日程表。

各参数说明:

-e [UserName]: 进入文字编辑器以编辑日程表,默认编辑器为vi -r [UserName]: 删除当前日程表 -l [UserName]: 列出当前日程表 -v [UserName]: 列出用户的cron作业状态

三、crontab命令的格式

若要创建新的任务调度,可以使用crontab -e命令,例如:

[[email protected] ~]# crontab -e

此时会打开vi编辑器,允许编写调度任务。crontab调度命令的格式如下:

 * * * * * command path  // 前五个字段指定何时执行任务,第六个字段为命令字符串,各字段之间用空格或制表符分隔。

调度命令的字段规则如下:

字段名称说明取值范围
分钟每小时的第几分钟执行0-59
小时每日的第几个小时执行0-23
日期每月的第几天执行1-31
每年的第几月执行1-12
星期每周的第几天执行0-6
命令名称要执行的命令及其参数

crontab命令中常用的特殊符号如下:

符号说明
*表示任何时刻
,表示分隔
表示一个范围,例如1-5表示从1点到5点
/n表示每n个单位执行一次,如*/1表示每小时执行一次命令。也可以写作1-23/1。

以下是一些crontab命令的示例:


使用crontab定时执行脚本的方法
00 8,12,16 * * * /data/app/scripts/monitor/df.sh  30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh  10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh  10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh  10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh    43 21 * * *  每天的21:43执行  15 05 * * *    每天的05:15执行  0 17 * * * 每天的17:00执行  0 17 * * 1 每周一的17:00执行  0,10 17 * * 0,2,3 每周日,周二,周三的17:00和 17:10执行  0-10 17 1 * * 每月1日从17:00到7:10 毎隔1分钟执行  0 1 * * *         1:00执行  0 */1 * * *        毎时0分 每隔1小时 执行  0 * * * *         毎时0分 每隔1小时 执行  2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行  30 5 1,15 * *       1日 和 15日的 5:30 执行

使用crontab定时执行脚本的方法

四、创建自定义的crontab命令

①示例:如果我希望每隔一分钟执行某个任务,