Linux 定时任务 - crontab 命令格式详解

Linux 定时任务 - crontab 命令格式详解

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令,是互联网很常用的技术。

 

很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠。实际工作中,90%的程序都没必要花这么多时间和精力去解决上面的两个问题,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,大家应该是毫无疑问的。

 

 

一、cron服务安装

 

yum install crontabs //安装crontab 

service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置

service crond status //查看crontab服务状态

 

二、cron服务命令

 

crontab -u  //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
crontab -l  //列出某个用户cron服务的详细内容
crontab -r  //删除没个用户的cron服务
crontab -e  //编辑某个用户的cron服务

 

例如:

root查看自己的cron设置:crontab -u root -l

root编辑自己的cron设置:crontab -u root -e
root删除fred的cron设置:crontab -u fred -r

 

当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

 

cron服务会每分钟检查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。

 

三、crontab配置

 

crontab执行定时任务,执行体可以是一条系统命令或者是自己写的一个脚本,同时也可以指派用户来执行。

 

方法1、使用crontab命令例如添加一个新的或编辑已有的

 

# crontab -e

 

就可以进入配置文件。此时配置crontab的执行者是当前登入用户,如果当前用户是root,需要为其他用户配置,可以使用

 

# crontab -e -u 用户名

# su 用户名

# crontab -e

 

配置完成后,会在/var/spool/cron目录中生成与用户同名的文件,可以通过命令:crontab -l查询当前用户的定时任务。

 

这种方法有一个缺点,就是当前系统中配置的crontab不在一个配置文件中,让管理员不方便查询系统到底有多少个crontab。

 

方法2、直接在/etc/crontab文件中添加不过需要是root身份。

 

# vi /etc/crontab 

 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

 

# 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,只需要在文件最后增加即可。注意这里面需要指定用户名;而方法1中则不需要,如果指定了,它会认为是命令的一部分,从而可能导致crontab执行失败。

如果服务器都是有root来管理,建议添加crontab使用方法2,这样系统中的所有计划任务都在一起,一目了然。

 

四、crontab命令详解

Linux 定时任务 - crontab 命令格式详解

  

基本格式 : 
*  *  *  *  *  user-name   command 
分 时 日 月 周 命令 
第1列表示分钟0~59 每分钟用*或者 */1表示 
第2列表示小时0~23(0表示0点) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列标识号星期0~7(0或7表示星期天) 

第6列表示当前用户(值为root,若为普通用户忽略该列) 
第7列要运行的命令

  

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

 

例子:

 

*/1 * * * *   每分钟执行

0 * * * *     每小时执行

0 0 * * *     每天执行       

0 0 * * 0     每周执行       

0 0 1 * *     每月执行       

0 0 1 1 *     每年执行  

   

Linux 定时任务 - crontab 命令格式详解
 

相关推荐