国际版健康码-stopc000021a

crontab 格式
2023年4月4日发(作者:browseui)

crontab⽂件的位置

Linux在相应⽤户下,⽤crontab-l命令可以查看该⽤户定时执⾏的任务,-e可以编辑,但是其真实⽂件在哪⼉呢??

以CentOS为例,其真实的位置在:/var/spool/cron下⾯,有执⾏定时任务的⽤户将会有以该⽤户命名的⼀个⽂档,vim该⽂档与⽤命令

crontab-l看到的⼀样。

crontab命令

crontab命令⽤于安装、删除或者列出⽤于驱动cron后台进程的表格。也就是说,⽤户把需要执⾏的命令序列放到crontab⽂件中以获得执

⾏。每个⽤户都可以有⾃⼰的crontab⽂件。下⾯就来看看如何创建⼀个crontab⽂件。

在/var/spool/cron下的crontab⽂件不可以直接创建或者直接修改。crontab⽂件是通过crontab命令得到的。现在假设有个⽤户名为foxy,需

要创建⾃⼰的⼀个crontab⽂件。⾸先可以使⽤任何⽂本编辑器建⽴⼀个新⽂件,然后向其中写⼊需要运⾏的命令和要定期执⾏的时间。

然后存盘退出。假设该⽂件为/tmp/。再后就是使⽤crontab命令来安装这个⽂件,使之成为该⽤户的crontab⽂件。键⼊:

这样⼀个crontab⽂件就建⽴好了。可以转到/var/spool/cron⽬录下⾯查看,发现多了⼀个foxy⽂件。这个⽂件就是所需的crontab⽂件。⽤

more命令查看该⽂件的内容可以发现⽂件头有三⾏信息:

#DONOTEDITTHISFILE-editthemasterandreinstall.

#(stalledonMonFeb2214:20:201999)

#(cronversion--$Id:crontab.c,v2.131994/01/1703:20:37vivieExp$)

⼤概意思是:

#切勿编辑此⽂件——如果需要改变请编辑源⽂件然后重新安装。

#⽂件安装时间:14:20:2002/22/1999

如果需要改变其中的命令内容时,还是需要重新编辑原来的⽂件,然后再使⽤crontab命令安装。

可以使⽤crontab命令的⽤户是有限制的。如果/etc/⽂件存在,那么只有其中列出的⽤户才能使⽤该命令;如果该⽂件不存在但

⽂件存在,那么只有未列在该⽂件中的⽤户才能使⽤crontab命令;如果两个⽂件都不存在,那就取决于⼀些参数的设置,可能是

只允许超级⽤户使⽤该命令,也可能是所有⽤户都可以使⽤该命令。

crontab命令的语法格式如下:

crontab[-uuser]file

crontab[-uuser]{-l|-r|-e}

第⼀种格式⽤于安装⼀个新的crontab⽂件,安装淳褪莊ile所指的⽂件,如果使⽤“-”符号作为⽂件名,那就意味着使⽤标准输⼊作为安装来

源。

-u如果使⽤该选项,也就是指定了是哪个具体⽤户的crontab⽂件将被修改。如果不指定该选项,crontab将默认是操作者本⼈的crontab,

也就是执⾏该crontab命令的⽤户的crontab⽂件将被修改。但是请注意,如果使⽤了su命令再使⽤crontab命令很可能就会出现混乱的情

况。所以如果是使⽤了su命令,最好使⽤-u选项来指定究竟是哪个⽤户的crontab⽂件。

-l在标准输出上显⽰当前的crontab。

-r删除当前的crontab⽂件。

-e使⽤VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab⽂件。当结束编辑离开时,编辑后的⽂件将⾃动安装。

[例7]

#crontab-l#列出⽤户⽬前的crontab。

106***date

0*/2***date

023-7/2,8***date

#在crontab⽂件中如何输⼊需要执⾏的命令和时间。该⽂件中每⾏都包括六个域,其中前五个域是指定命令被执⾏的时间,最后⼀个域是要

被执⾏的命令。每个域之间使⽤空格或者制表符分隔。格式如下:

minutehourday-of-monthmonth-of-yearday-of-weekcommands

第⼀项是分钟,第⼆项是⼩时,第三项是⼀个⽉的第⼏天,第四项是⼀年的第⼏个⽉,第五项是⼀周的星期⼏,第六项是要执⾏的命令。这

些项都不能为空,必须填⼊。如果⽤户不需要指定其中的⼏项,那么可以使⽤*代替。因为*是统配符,可以代替任何字符,所以就可以认为

是任何时间,也就是该项被忽略了。在表4-1中给出了每项的合法范围。

表4-1 指定时间的合法范围

时间

合法值

minute

00-59

hour

00-23,其中00点就是晚上12点

day-of-month

01-31

month-of-year

01-12

day-of-week

0-6,其中周⽇是0

这样⽤户就可以往crontab⽂件中写⼊⽆限多的⾏以完成⽆限多的命令。命令域中可以写⼊所有可以在命令⾏写⼊的命令和符号,其他所有

时间域都⽀持列举,也就是域中可以写⼊很多的时间值,只要满⾜这些时间值中的任何⼀个都执⾏命令,每两个时间值中间使⽤逗号分隔。

除了数字还有⼏个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表⽰每5个单位,"-"代表从某

个数字到某个数字,","分开⼏个离散的数字。⼏个例⼦:

每天早上6点

06***echo"Goodmorning.">>/tmp///注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个⼩时

0*/2***echo"Haveabreaknow.">>/tmp/

晚上11点到早上8点之间每两个⼩时,早上⼋点

023-7/2,8***echo"Haveagooddream:)">>/tmp/

每个⽉的4号和每个礼拜的礼拜⼀到礼拜三的早上11点

0114*1-3commandline

1⽉1⽇早上4点

0411*commandline

SHELL=/bin/bash

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

MAILTO=root//如果出现错误,或者有数据输出,数据作为邮件发给这个帐号

HOME=///使⽤者运⾏的路径,这⾥是根⽬录

#run-parts

01****rootrun-parts/etc///每⼩时执⾏/etc/内的脚本

024***rootrun-parts/etc///每天执⾏/etc/内的脚本

224**0rootrun-parts/etc///每星期执⾏/etc/内的脚本

4241**rootrun-parts/etc/y//每⽉去执⾏/etc/y内的脚本

⼤家注意"run-parts"这个参数了,如果去掉这个参数的话,后⾯就可以写要运⾏的某个脚本名,⽽不是⽂件夹名了。

[例8]

5,15,25,35,45,5516,17,18***command

这就是表⽰任意天任意⽉,其实就是每天的下午4点、5点、6点的5min、15min、25min、35min、45min、55min时执⾏命令。

[例9]在每周⼀,三,五的下午3:00系统进⼊维护状态,重新启动系统。那么在crontab⽂件中就应该写⼊如下字段:

0015**1,3,5shutdown-r+5

然后将该⽂件存盘为,再键⼊安装该⽂件。

[例10]每⼩时的10分,40分执⾏⽤户⽬录下的innd/bbslin这个指令:

10,40****innd/bbslink

[例11]每⼩时的1分执⾏⽤户⽬录下的bin/account这个指令:

1****bin/account

[例12]每天早晨三点⼆⼗分执⾏⽤户⽬录下如下所⽰的两个指令(每个指令以;分隔):

203***(/bin/;bin/expire$#@62;expire.1st)

[例13]每年的⼀⽉和四⽉,4号到9号的3点12分和3点55分执⾏/bin/rm-fexpire.1st这个指令,并把结果添加在这个⽂件之后(

⽂件位于⽤户⾃⼰的⽬录位置)。

12,5534-91,4*/bin/rm-fexpire.1st$#@62;$#@62;

[例14]我们来看⼀个超级⽤户的crontab⽂件:

#Runthe‘atrun’programeveryminutes

#Thisrunsanythingthat’sduetorunfrom‘at’.Seeman‘at’or‘atrun’.

0,5,10,15,20,25,30,35,40,45,50,55****/usr/lib/atrun

407***updatedb

8,10,22,30,39,46,54,58****/bin/sync

更多推荐

crontab 格式