Linux crontab命令详解

Cron是Unix或类Unix计算机操作系统中基于时间的作业调度器。您可以使用Cron来安排作业,即在指定的时间、日期或间隔执行命令或shell脚本。例如,允许您自动化系统维护或管理,从网上下载文件或定期发送电子邮件。它是一个守护进程,即始终在服务器上运行的后台进程。Cron应该执行的任务称为CronJobs。Cron这个名字最初来自希腊时间之神“chronos”。

CronJob

CronJobs的应用场景

CronJobs可用于单个命令或自动执行定期重复的顺序任务,例如,通过删除过时的条目、日志文件和注释来清理数据库,或创建网站用户数量的定期统计数据。

其他应用程序包括更新RSS提要、在特定日期将新内容发布到网站、生成多张发票或自动分发时事通讯。同样,可以使用CronJobs计划数据库备份。

CronTab文件的结构和语法

Cron使用特殊的配置文件,即所谓的CronTab文件,其中包含要执行的Cron作业的列表。CronTab代表Cron表。CronTab文件中的每一行代表一个CronJob。它看起来类似于由一个空格分隔的一行列。每一行都指定了特定命令或脚本的执行时间和频率。

在CronTab文件中,空行或以#、空格或制表符开头的行将被忽略。以#开头的行被视为用户评论。

CronTab中的有效行要么声明环境变量,要么定义CronJob。活动行中不允许有注释。

通过键入crontab -e,可以在命令行解释器中访问CronTab文件。CronTab文件中的命令及其运行时由Cron守护进程检查,后者在系统后台执行这些命令。每个CronTab都有以下基本结构,有六列像表格一样排列:

* * * * * command to execute

前五列包含时间值,用于定义应执行命令的时间。从左到右分别是:

  • minute-分钟,指定为0-59
  • hour-小时,指定为0-23
  • day-天,指定为1-31
  • month-月份,指定为1-12
  • week-工作日,指定为0-7,0或7是星期日

对于这些值中的每一个,通配符“*”可用于在任何时间(即在任何分钟、小时、天、月或工作日)执行,“*/n”可用于每n(分钟、小时等)执行一次,而“n、x、y”可用于在n、x或y上执行。最后一列指定要执行的脚本的相对或绝对路径。当月份或工作日的分钟、小时、月和日与当前时间匹配时,将执行CronJob。

Crontab宏

有些Cron实现还支持宏,使用这些字符串代替CronTab文件中的前五个字段。每个字符串指定一个特定的频率:

@reboot  /var/tmp/my_script
时机 描述 等价的crontab表达式
@yearly 每年1月1日午夜执行一次 0 0 1 1 *
@monthly 每月第一天午夜执行一次 0 0 1 * *
@weekly 每周在周日午夜执行一次 0 0 * * 0
@daily 每天午夜执行一次 0 0 * * *
@hourly 每小时开始时执行 0
@reboot 系统启动时一次性执行

Crontab命令

命令 作用
crontab-l 列出当前用户的作业
crontab -r 删除当前用户的所有作业。
crontab-e 编辑当前用户的作业。
crontab[文件名] 删除所有作业,并替换为从[filename]读取的作业。如果没有指定文件,将使用stdin。

Cron常见示例

1.每年2月2日执行一次任务

每年在2月的某个特定日期运行一次备份脚本。

  0 9 2 2 *   /usr/local/bin/yearly_backup

2.每天每小时在第五分钟执行一次任务

使用以下命令在每天的第五分钟每小时运行一次脚本:

  5 * * * *      $HOME/bin/daily.job >> $HOME/tmp/out  2>&1

3.每天午夜后5分钟执行一次任务

使用以下命令在每天午夜后运行5分钟:

  5 0 * * *      $HOME/bin/daily.job >> $HOME/tmp/out  2>&1

4.在每个月的第一天的特定时间执行一次任务

使用以下命令在每月1日下午2:15运行:

  15 14 1 * * *     $HOME/bin/monthly

5.仅在工作日(不包括周六和周日)的特定时间执行

使用以下命令在工作日的晚上10点运行:

  0 22 * * 1-5  $HOME/bin/weekday.job >> $HOME/tmp/out  2>&1

6.在单个cron作业中调度多个作业

我们还可以使用分号(;)在单个cron作业中调度多个作业分开的工作如下所示:

  0 12 * * * /var/tmp/script01.sh; /var/tmp/script02.sh

7.使用范围指定开始时间

可以使用连字符指定范围。值为1-5表示此字段对数字1到5有效。如果使用名称而不是数字,则无法指定范围。指定范围的示例如下所示。作业计划每小时从下午3点运行到晚上10点。

  * 3-10 * * * /var/tmp/script.sh

8.使用步长值指定开始时间

阶跃值可以与范围一起使用。要指定步长值,请在范围后面加一个正斜杠(/)和一个数字。指定的数字是步长值。例如,下面指定每三个值(在本例中为2、5、8和11)应匹配一次:

  * 0-12/3 * * *  /var/tmp/script.sh

步长值也可以与星号一起使用。小时字段中的值*/3每三小时匹配一次(0、3、6、9、12、15、18和21)。

9.使用列表指定开始时间

名单也是可以接受的;列表中的每一项都用逗号分隔。通常将列表与范围结合使用,例如:

  1-15,31-45 * * * *  /var/tmp/script.sh

这个例子匹配从1到15以及从31到45的所有数字(在我们的例子中是分钟)。如果使用名称而不是数字,则无法指定列表。

10.在每月1日、10日和22日凌晨4:45执行一次任务

下面是一个在一个月的几个特定日子的特定时间运行作业的示例。

  45 4 1,10,22 * * /apps/bin/backup.sh 

CronJob常见问题解答

1.*在Cron中是什么意思?

星号*在Cron中用作通配符。*将任务的执行设置为任何分钟、小时、天、工作日或月。

2.Cron的用途是什么?

Cron允许您安排作业并自动执行定期任务,例如定时删除日志、发邮件。

3.什么是CronTab?

crontab是包含单个cronjob的文件。

4.如何安排每天凌晨2点备份的CronJob?

每天凌晨2点进行的定时备份可能如下所示:

0 2  *  *  * /bin/sh backup.sh

5.cron中特殊字符的含义

  • *:代表所有可能的值。
  • -:表示指定范围,小时子表达式中 10-15, 代表10,11,12,13,14,15小时触发任务
  • ,:表示列出枚举值,小时子表达式中 11,12 代表11或者12小时触发任务。
  • /:被用于指定增量。小时子表达式中,“0/1”表示从0分钟开始,每1小时执行一次。“3/2”表示从第3小时开始,每2小时执行一次。
Java Long类型比较相等
Bash脚本中逐行读取文件

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

42 + 7 =

ajax-loader