国际版健康码-stopc000021a
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 格式
发布评论