Linux_crond和crontab的用法


crond

crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。而crond正是它的守护进程。


(1)crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现。

(2)crontab工作

 运行Linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)

 默认系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过/etc/cron.allow文件限制权限。


  >>crontab支持两种状态:

a.直接编写计划任务;

b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定。
1.crontab –e:编辑当前定时任务

保存完重新crond :

service crond restart

2. crontab用法

crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。 
crontab –l : 显示 crontab 文件。 
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。

 

在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下: 

minute hour day-of-month month-of-year day-of-week commands    

合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday) 

除了数字还有几个特殊的符号:"*"、"/"和"-"、","

  • *代表所有的取值范围内的数字
  • "/"代表每的意思,"/5"表示每5个单位
  • "-"代表从某个数字到某个数字
  • ","分开几个离散的数字

:commands 注意以下几点

  • 要是存在文件,要写绝对路径
  • 即使是打印也不会显示在显示屏,在后台运行,最好重定向日志
 

3. 编辑crontab文件

1
2
3
EDITOR=vi
export EDITOR
crontab -e
 

4. 流程举例

step1:写cron脚本文件,命名为crontest.cron。

15,30,45,59 * * * * echo "xgmtest....."     表示,每隔15分钟,执行一次打印命令 

step2:添加定时任务。执行命令

1
crontab /home/del/crontest.cron >~/log

step3:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

1
crontab -l

结果程序会每个15分钟往脚本里写一次“xgmtest.....”

 

5. 几个例子

复制代码
每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
 
每两个小时(第一个为15,指明没两个小时的第15min中执行一次)
15 */2 * * * echo "Have a break now." >> /tmp/test.txt 
 
晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
 
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
 
1月1日早上4点
0 4 1 1 * command line
 
每小时(第一分钟)执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
 
每天(凌晨4:02)执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
 
每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
 
每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly
 
注意:  "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。  
 
每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command
 
每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * *1,3,5 shutdown -r +5
 
每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink
 
每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account
 
每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)  
 
每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。
12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt 
复制代码

 6.重启crond : service crond restart


(3)用法:


/etc/cron.deny 该文件中所列的用户不允许使用Crontab命令

/etc/cron.allow 该文件中所列的用户允许使用Crontab命令

/var/spool/cron/ 是所有用户的crontab文件

/var/spool/cron/crontabs /var/spool/cron/crontabs

Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

参数名称www.britepic.org 含义 示例

-l  显示用户的Crontab文件的内容 crontabl –l

-i 删除用户的Crontab文件前给提示 crontabl -ri

-r  从Crontab目录中删除用户的Crontab文件 crontabl -r

-e  编辑用户的Crontab文件 crontabl -e

用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。


1."code" class="cpp">[root@www etc]# vim cron.deny //文件中所列的用户不允许使用Crontab  

2.[root@www etc]# vim cron.allow   //该文件中所列的用户允许使用Crontab命令  

[root@www etc]# vim cron.deny //文件中所列的用户不允许使用Crontab[root@www etc]# vim cron.allow //该文件中所列的用户允许使用Crontab命令


3.[root@www etc]# cat cron.deny  

4.admin  

5.[root@www etc]# cat cron.allow  

6.root 

[root@www etc]# cat cron.denyadmin[root@www etc]# cat cron.allowroot


7.[root@www etc]# su - admin  

8.[admin@www ~]$ crontab -e  

9.You (admin) are not allowed to use this program (crontab)  

10.See crontab(1) for more information  

[root@www etc]# su - admin[admin@www ~]$ crontab -eYou (admin) are not allowed to use this program (crontab)See crontab(1) for more information




(4)crontab文件

第一步:写cron脚本文件,命名为crontest.cron。
15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt  表示,每隔15分钟,执行打印一次命令 
第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定 
第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本


/


[root@www etc]# cat 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   

[root@www etc]# cat crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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


 *      *     *      *     *    /bin/sh /scripts/yy.sh

 分    时   日    月   周    命令和文件路径

(00-59)  (0-23)  (1-31)  (1-12)   (0-6)

所用符号表示意思

星号每的意思
减号连续一段时间,如:00 17-19 * * * cmd  每天下午17点,18点,19点执行一次命令

逗号多个时间段,如:00 10-11,17-19 * * * cmd 每天的上午10,11点整,下午的17,18,19点整执行一次命令

/n n代表数字,指每隔n时间执行一次,如: */2 * * * * cmd 每隔2分钟执行一次命令



2/dev/null 2>&1解释

 

0是标准输入    使用<<<

1是标准输出    使用>>>

2是标准错误输出  使用2>2>>

>/dev/null 2>&1  即错误输出与标准输出全部重定向到空,可以写成1>/dev/null 2>/dev/null



(5)cron服务
  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
  /sbin/service crond start    //启动服务
  /sbin/service crond stop     //关闭服务
  /sbin/service crond restart  //重启服务
  /sbin/service crond reload   //重新载入配置
  /sbin/service crond status   //查看服务状态 


测试:


[root@www etc]# crontab -e  

crontab: installing new crontab  

[root@www etc]# /sbin/service crond start  

Starting crond:                                            [  OK  ]  
[root@www etc]# cd /home  
[root@www home]# vim tmp  
[root@www home]# crontab -l  
*/1 * * * * echo we are young >>/home/tmp   //每隔一分钟向/home/tmp输入we are young 

[root@www etc]# crontab -ecrontab: installing new crontab[root@www etc]# /sbin/service crond startStarting crond: [ OK ][root@www etc]# cd /home[root@www home]# vim tmp[root@www home]# crontab -l*/1 * * * * echo we are young >>/home/tmp //每隔一分钟向/home/tmp输入we are young


[root@www home]# cat tmp  
we are young  
we are young  
we are young  

[root@www home]# cat tmpwe are youngwe are youngwe are young


你可能感兴趣的:(linux内核)