crontab定时执行脚本——按照你期望的方式

如何每分钟执行一个命令?
如何让脚本只在工作日执行?
如何让脚本只在上班时间执行?
元旦当天的8点执行任务怎么做?

```* * * * * /var/shell/test.sh```  // 这个五个星代表什么意思?
```10 * * * * /var/shell/test.sh``` // 这是代表每天的xx点10分执行脚本还是每10分钟执行一次?
```10 2,3,5,12 * * * /var/shell/test.sh``` // 这逗号又是什么意思?
```10 8-17 * * 1-5 /var/shell/test.sh``` // 代表工作日8-17点,每10分钟执行一次脚本吗?
```*/5 */2 * * * /var/shell/test.sh``` // 这么写对不对?

本文用于解决如上问题,记住以上表达式的含义。并简单说明crontab命令。

注释及参数说明 (划重点了!)

上面代码返回的注释标识了命令格式及参数说明。

crontab命令格式如下:

* * * * * user-name command to be executed

  • 5个 * 字段自左到右代表的意思及取值范围:
    分钟(0-60)、小时(0-23)、天(1-31)、月(1-12)、星期(0-6);

命令参数的特殊符号

(*) :代表所有可能的值

(,) :用逗号隔开的值指定对应字段的列表范围,例如:“1,3,5”在月份中则限制执行命令在1 3 5 月执行;

(-) :表示一个整数范围,例如“2-6”表示“2,3,4,5,6”;

(/) :指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时 / 可以和 * 一起使用,例如 */10,如果用在minute字段,表示每十分钟执行一次。

解答

如何每分钟执行一个命令?

  • 代表所有可能值,第一个参数标识分钟,这里填 * 即可:
* * * * *  //代表每一分钟都执行一次;
* 1 * * * //代表1点时每分钟执行一次;
* * 1 * * //代表每月1日每分钟执行一次;
* * * 1 * //代表每年1月每分钟执行一次;

如何让脚本只在工作日执行?
工作日为周一至周五,把第5个字段参数写为1-5即可:

* * * * 1-5 //代表每周一至周五执行脚本(每分钟执行一次)

如何让脚本只在上班时间执行?
上班时间为周一至周五,8点-17点:

* 8-17 * * 1-5 //代表每周一到周五的8点到17点执行脚本(每分钟执行一次)

元旦当天的8点执行任务怎么做?
1月的第一天执行脚本:

* * 1 1 * //代表每年1月1日执行脚本每分钟执行一次;
```* * * * * /var/shell/test.sh```  // 每分钟执行一次脚本
```10 * * * * /var/shell/test.sh``` // *点10分的时候执行脚本一次
```10 2,3,5,12 * * * /var/shell/test.sh``` // 2:10 3:10 5:10 12:10 分别执行一次脚本
```10 8-17 * * 1-5 /var/shell/test.sh``` // 代表周1-周5的8-17点,每个整点的第10分执行一次脚本
```*/5 */2 * * * /var/shell/test.sh``` // 每两个小时执行一次,执行规则为这个小时每五分钟执行一次

附录(说明一些基本操作等)

linux系统用于执行计划任务的命令,命令行输入如下命令,

cat /etc/crontab

输出如下结果:


[root@localhost cron]# 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

说明

配置

前四行是用来配置crond任务运行的环境变量:

  • SHELL : 指定系统使用哪个shell,这里是bash;

  • PATH : 指定系统执行命令的路径

  • MAILTO :指定crond的任务执行信息将通过电子邮件发送给root用户(如果MAILTO为空,则表示不发送任务执行信息给用户)

  • HOME变量指定在执行命令或者脚本时使用的主目录。

crond 服务

安装

yum install crontabs

操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看服务状态:

service crond status

手动启动:

service crond start

查看服务自启动情况

ntsysv

  • [*]表示已自启动。
开机自动启动命令:

chkconfig –level 35 crond on

crontab 用法


usage:  crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

(default operation is replace, per 1003.2)

-e  (edit user's crontab)

-l  (list user's crontab)

-r  (delete user's crontab)

-i  (prompt before deleting user's crontab)

-s  (selinux context)

例如我输入crontab -e后出现如下我自己的计划任务


*/5 * * * * /xxx1.sh // 每五分钟执行1次

0 3 * * * /xxx2.sh  // 每天3点执行1次

0 4 * * * /xxx3.sh // 每天4点执行1次

你可能感兴趣的:(crontab定时执行脚本——按照你期望的方式)