Cron定时任务

来源:互联网 发布:org.apache.log jar包 编辑:程序博客网 时间:2024/06/11 17:16

1.1.           定时任务Cron

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

service crond status  #查看服务状态

/sbin/service crond start  #启动服务

/sbin/service crond stop  #关闭服务

/sbin/service crond restart  #重启服务

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

 

 

1.1.1. 系统定时任务

文件/etc/crontab内的定时任务,配置的是针对系统的任务。cron服务每分钟需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。编辑/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 beexecuted

 

10 * * * * root  /etc/cron.hourly  #每10分钟执行/etc/cron.hourly脚本

0 1 * * * root  run-parts  /etc/cron #每小时执行/etc/内的脚本

 

大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

 

1.1.2. 用户定时任务

Ø crontab指令

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

crontab -u  #设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

crontab -l  #列出某个用户cron服务的详细内容

crontab -r  #删除没个用户的cron服务

crontab -e  #编辑某个用户的cron服务

 

比如说,root查看自己的cron设置:crontab -uroot -l
再例如,root想删除fred的cron设置:crontab -ufred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

 

Ø crontab命令添加任务

²  使用crontab -e 进入vi编辑模式

²  添加定时任务,每个任务一行,例如下面:

10 * * * *  /etc/cron.hourly  #每10分钟执行/etc/cron.hourly脚本

0 1 * * *  run-parts  /etc/cron #每小时执行/etc/内的脚本

²  vi编辑器保存并退出即可。定时任务服务会自动重新加载配置文件。

 

Ø 编辑用户定时配置文件添加任务

在/var/spool/cron目录下保存了linux系统各个用户的定时任务配置。使用crantab指令操作用户的定时任务时,实际上是操作了该目录下的相应用户的配置定时任务文件,所以我们直接编辑用户定时任务配置文件来实现编辑配置定时任务:

² 若该路径下缺少用户配置文件,则自行新建即可,文件名为用户名,权限为600:

touch /var/spool/cron/root

chmod 600 /var/spool/cron/root

² 编辑文件,添加定时任务配置:

10 * * * *  /etc/cron.hourly  #每10分钟执行/etc/cron.hourly脚本

0 1 * * *  run-parts  /etc/cron #每小时执行/etc/内的脚本

² 保存并退出

 

 

1.1.3. 定时器格式

Ø 定时器格式

# 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 beexecuted

0        12  * *  * root echo “cron!”  #每天12点执行指令:echo“cron!”

10 12  *  *  *root run-parts /var/shell  #每天12点10分执行/var/shell/目录下的所有脚本文件

 

² minute - 从0到59的整数

² hour - 从0到23的整数

² day - 从1到31的整数 (必须是指定月份的有效日期)

² month - 从1到12的整数 (或如Jan或Feb简写的月份)

² dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)

² command - 需要执行的命令(可用as ls /proc>> /tmp/proc或执行自定义脚本的命令)

 root表示以root用户身份来运行
 run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本

 

Ø 特殊符号使用

² 星号(*)表示所有可用的值,即任何的意思。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令

² 整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4

² 指定数值由逗号分开。如:3,4,6,8表示这四个指定整数

² 符号“/”指定步进设置。“/”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。

 

 

1.1.4. 定时器常见问题

Ø cron配置正确却没执行

² 查看日志是否真的没有执行:

cat /var/log/cron

² 查看日志中显示执行的指令是否有误:

² 尝试添加环境变量(有时是用户下的没有设置相应的环境变量导致),在定时任务配置中,目标指令前加入环境变量配置:

10  12  * *  * root  . /etc/profile  /var/shell.sh  #每天12点10分执行

0 0