志在指尖
用双手敲打未来

linux计划任务(crontab详解)

linux计划任务

Linux体系中提供了两种计划任务,一种是只会履行一次的at计划任务,另一种是能够周期性履行的cron计划任务。
在配置和运用at拟定的一次性计划任务之前你需求确保atd服务是正常运行的(Running)!
计划任务的配置是需求在履行at指令并在这以后指定一个时刻点,履行之后就会进入交互形式,在该形式下输入预备履行的指令。完成后运用组合键退出,一起能够运用删去我们输入的内容
到了指定时刻体系会主动履行计划任务中的相关指令,以邮件的形式发给用户,用户再次登录会有新邮件提示,或者运用mail查看邮件。
at-l:查看等候履行的计划任务
at-c3:查看序列为3的计划任务具体内容
at-d1:删去序列为3的计划任务
另外我们也能够运用非交互方法履行计划任务linux

crontab详解

linux体系则是由cron(crond)这个体系服务来操控的。Linux体系上面原本就有非常多的计划性作业,因而这个体系服务是默许发动的。另外,因为运用者自己也能够设置计划使命,所以,Linux体系也提供了运用者操控计划使命的指令:crontab指令。
一、crond简介
crond是linux下用来周期性的履行某种使命或等候处理某些事件的一个看护进程,与windows下的计划使命相似,当装置完结操作体系后,默许会装置此服务工具,并且会主动发动crond进程,crond进程每分钟会定期检查是否有要履行的使命,假如有要履行的使命,则主动履行该使命。
Linux下的使命调度分为两类,体系使命调度和用户使命调度。
体系使命调度:体系周期性所要履行的作业,比如写缓存数据到硬盘、日志整理等。在/etc目录下有一个crontab文件,这个便是体系使命调度的配置文件。
/etc/crontab文件包含下面几行:
cat/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=HOME=/
#run-parts
51****rootrun-parts/etc/cron.hourly
247***rootrun-parts/etc/cron.daily
224**0rootrun-parts/etc/cron.weekly
4241**rootrun-parts/etc/cron.monthly
前四行是用来配置crond使命运转的环境变量,第一行SHELL变量指定了体系要运用哪个shell,这里是bash,第二行PATH变量指定了体系履行指令的途径,第三行MAILTO变量指定了crond的使命履行信息将经过电子邮件发送给root用户,假如MAILTO变量的值为空,则表明不发送使命履行信息给用户,第四行的HOME变量指定了在履行指令或许脚本时运用的主目录。第六至九行表明的意义将在下个小节详细叙述。这里不在多说。
用户使命调度:用户定期要履行的作业,比如用户数据备份、守时邮件提醒等。用户能够运用crontab工具来定制自己的计划使命。一切用户界说的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名共同。
运用者权限文件:
文件:
/etc/cron.deny
阐明:
该文件中所列用户不允许运用crontab指令
文件:
/etc/cron.allow
阐明:
该文件中所列用户允许运用crontab指令
文件:
/var/spool/cron/
阐明:
一切用户crontab文件存放的目录,以用户名命名
crontab文件的意义:
用户所建立的crontab文件中,每一行都代表一项使命,每行的每个字段代表一项设置,它的格局共分为六个字段,前五段是时刻设定段,第六段是要履行的指令段,格局如下:
minutehourdaymonthweekcommand
其间:
minute:表明分钟,能够是从0到59之间的任何整数。
hour:表明小时,能够是从0到23之间的任何整数。
day:表明日期,能够是从1到31之间的任何整数。
month:表明月份,能够是从1到12之间的任何整数。
week:表明星期几,能够是从0到7之间的任何整数,这里的0或7代表周日。
command:要履行的指令,能够是体系指令,也能够是自己编写的脚本文件。
在以上各个字段中,还能够运用以下特别字符:
星号(*):代表一切可能的值,例如month字段假如是星号,则表明在满足其它字段的限制条件后每月都履行该指令操作。
逗号(,):能够用逗号隔开的值指定一个列表规模,例如,“1,2,5,7,8,9”
中杠(-):能够用整数之间的中杠表明一个整数规模,例如“2-6”表明“2,3,4,5,6”
正斜线(/):能够用正斜线指守时刻的距离频率,例如“0-23/2”表明每两小时履行一次。一起正斜线能够和星号一同运用,例如*/10,假如用在minute字段,表明每十分钟履行一次。
二、crond服务
装置crontab:
yuminstallcrontabs
服务操作阐明:
/sbin/servicecrondstart//发动服务
/sbin/servicecrondstop//封闭服务
/sbin/servicecrondrestart//重启服务
/sbin/servicecrondreload//从头载入配置
/sbin/servicecrondstatus//发动服务
检查crontab服务是否已设置为开机发动,履行指令:
ntsysv
参加开机主动发动:
chkconfig–level35crondon
三、crontab指令详解
1.指令格局:
crontab[-uuser]file
crontab[-uuser][-e|-l|-r]
2.指令功用:
经过crontab指令,咱们能够在固定的距离时刻履行指定的体系指令或shellscript脚本。时刻距离的单位能够是分钟、小时、日、月、周及以上的恣意组合。这个指令非常设合周期性的日志分析或数据备份等作业。
3.指令参数:
-uuser:用来设定某个用户的crontab服务,例如,“-uixdba”表明设定ixdba用户的crontab服务,此参数一般有root用户来运转。
file:file是指令文件的姓名,表明将file做为crontab的使命列表文件并载入crontab。假如在指令行中没有指定这个文件,crontab指令将承受规范输入(键盘)上键入的指令,并将它们载入crontab。
-e:修正某个用户的crontab文件内容。假如不指定用户,则表明修正当时用户的crontab文件。
-l:显现某个用户的crontab文件内容,假如不指定用户,则表明显现当时用户的crontab文件内容。
-r:从/var/spool/cron目录中删去某个用户的crontab文件,假如不指定用户,则默许删去当时用户的crontab文件。
-i:在删去用户的crontab文件时给承认提示。
4.常用办法:
1).创立一个新的crontab文件
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情便是设置环境变量EDITOR。cron进程依据它来确认运用哪个修正器修正crontab文件。99%的UNIX和LINUX用户都运用vi,假如你也是这样,那么你就修正$HOME目录下的.profile文件,在其中参加这样一行:
EDITOR=vi;exportEDITOR
然后保存并退出。无妨创立一个名为cron的文件,其间是用户名,例如,davecron。在该文件中参加如下的内容。
#(putyourowninitialshere)echothedatetotheconsoleevery
#15minutesbetween6pmand6am
0,15,30,4518-06***/bin/echo‘date’>/dev/console
保存并退出。确信前面5个域用空格分隔。
在上面的比如中,体系将每隔15分钟向操控台输出一次当时时刻。假如体系溃散或挂起,从最终所显现的时刻就能够一眼看出体系是什么时刻停止作业的。在有些体系中,用tty1来表明操控台,能够依据实际情况对上面的比如进行相应的修正。为了提交你刚刚创立的crontab文件,能够把这个新创立的文件作为cron指令的参数:
$crontabdavecron
现在该文件现已提交给cron进程,它将每隔15分钟运转一次。
一起,新创立文件的一个副本现已被放在/var/spool/cron目录中,文件名便是用户名(即dave)。
2).列出crontab文件
为了列出crontab文件,能够用:
$crontab-l
0,15,30,45,18-06***/bin/echo`date`>dev/tty1
你将会看到和上面相似的内容。能够运用这种办法在$HOME目录中对crontab文件做一备份:
$crontab-l>$HOME/mycron
这样,一旦不当心误删了crontab文件,能够用上一节所叙述的办法敏捷康复。
3).修正crontab文件
假如期望添加、删去或修正crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就能够用vi来修正crontab文件,相应的指令为:
$crontab-e
能够像运用vi修正其他任何文件那样修正crontab文件并退出。假如修正了某些条目或添加了新的条目,那么在保存该文件时,cron会对其进行必要的完整性检查。假如其间的某个域出现了超出允许规模的值,它会提示你。
咱们在修正crontab文件时,没准会参加新的条目。例如,参加下面的一条:
#DT:deletecorefiles,at3.30amon1,7,14,21,26,26daysofeachmonth
3031,7,14,21,26**/bin/find-name“core’-execrm{}\;
现在保存并退出。最好在crontab文件的每一个条目之上参加一条注释,这样就能够知道它的功用、运转时刻,更为重要的是,知道这是哪位用户的作业。
现在让咱们运用前面讲过的crontab-l指令列出它的全部信息:
$crontab-l
#(crondaveinstalledonTueMay413:07:431999)
#DT:echthedatetotheconsoleevery30minites
0,15,30,4518-06***/bin/echo`date`>/dev/tty1
#DT:deletecorefiles,at3.30amon1,7,14,21,26,26daysofeachmonth
3031,7,14,21,26**/bin/find-name“core’-execrm{}\;
4).删去crontab文件
要删去crontab文件,能够用:
$crontab-r
5).康复丢失的crontab文件
假如不当心误删了crontab文件,假定你在自己的$HOME目录下还有一个备份,那么能够将其复制到/var/spool/cron/,其间是用户名。假如因为权限问题无法完结复制,能够用:
$crontab
其间,是你在$HOME目录中副本的文件名。
我主张你在自己的$HOME目录中保存一个该文件的副本。我就有过相似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这便是为什么有些体系文档主张不要直接修正crontab文件,而是修正该文件的一个副本,然后从头提交新的文件。
有些crontab的变体有些奇怪,所以在运用crontab指令时要格外当心。假如遗漏了任何选项,crontab可能会打开一个空文件,或许看起来像是个空文件。这时敲delete键退出,不要按,否则你将丢失crontab文件。
5.运用实例
实例1:每1分钟履行一次command
指令:
*****command
实例2:每小时的第3和第15分钟履行
指令:
3,15****command
实例3:在上午8点到11点的第3和第15分钟履行
指令:
3,158-11***command
实例4:每隔两天的上午8点到11点的第3和第15分钟履行
指令:
3,158-11*/2**command
实例5:每个星期一的上午8点到11点的第3和第15分钟履行
指令:
3,158-11**1command
实例6:每晚的21:30重启smb
指令:
3021***/etc/init.d/smbrestart
实例7:每月1、10、22日的4:45重启smb
指令:
4541,10,22**/etc/init.d/smbrestart
实例8:每周六、周日的1:10重启smb
指令:
101**6,0/etc/init.d/smbrestart
实例9:每天18:00至23:00之间每隔30分钟重启smb
指令:
0,3018-23***/etc/init.d/smbrestart
实例10:每星期六的晚上11:00pm重启smb
指令:
023**6/etc/init.d/smbrestart
实例11:每一小时重启smb
指令:
**/1***/etc/init.d/smbrestart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
指令:
*23-7/1***/etc/init.d/smbrestart
实例13:每月的4号与每周一到周三的11点重启smb
指令:
0114*mon-wed/etc/init.d/smbrestart
实例14:一月一号的4点重启smb
指令:
041jan*/etc/init.d/smbrestart
实例15:每小时履行/etc/cron.hourly目录内的脚本
指令:
01****rootrun-parts/etc/cron.hourly
阐明:
run-parts这个参数了,假如去掉这个参数的话,后边就能够写要运转的某个脚本名,而不是目录名了
四、运用留意事项
留意环境变量问题
有时咱们创立了一个crontab,可是这个使命却无法主动履行,而手动履行这个使命却没有问题,这种情况一般是因为在crontab文件中没有配置环境变量引起的。
在crontab文件中界说多个调度使命时,需求特别留意的一个问题便是环境变量的设置,因为咱们手动履行某个使命时,是在当时shell环境下进行的,程序当然能找到环境变量,而体系主动履行使命调度时,是不会加载任何环境变量的,因而,就需求在crontab文件中指定使命运转所需的一切环境变量,这样,体系履行使命调度时就没有问题了。
不要假定cron知道所需求的特别环境,它其实并不知道。所以你要保证在shelll脚本中提供一切必要的途径和环境变量,除了一些主动设置的大局变量。所以留意如下3点:
1)脚本中触及文件途径时写大局途径;
2)脚本履行要用到java或其他环境变量时,经过source指令引进环境变量,如:
catstart_cbp.sh
#!/bin/sh
source/etc/profile
exportRUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh-cmev&
3)当手动履行脚本OK,可是crontab死活不履行时。这时有必要斗胆怀疑是环境变量惹的祸,并能够尝试在crontab中直接引进环境变量处理问题。如:
0****./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh
留意整理体系用户的邮件日志
每条使命调度履行完毕,体系都会将使命输出信息经过电子邮件的形式发送给当时体系用户,这样日积月累,日志信息会非常大,可能会影响体系的正常运转,因而,将每条使命进行重定向处理非常重要。
例如,能够在crontab文件中设置如下形式,疏忽日志输出:
0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1
“/dev/null2>&1”表明先将规范输出重定向到/dev/null,然后将规范过错重定向到规范输出,因为规范输出现已重定向到了/dev/null,因而规范过错也会重定向到/dev/null,这样日志输出问题就处理了。
体系级使命调度与用户级使命调度
系统级使命调度首要完结体系的一些保护操作,用户级使命调度首要完结用户自界说的一些使命,能够将用户级使命调度放到体系级使命调度来完结(不主张这么做),可是反过来却不可,root用户的使命调度操作能够经过“crontab–uroot–e”来设置,也能够将调度使命直接写入/etc/crontab文件,需求留意的是,假如要界说一个守时重启体系的使命,就有必要将使命放到/etc/crontab文件,即便在root用户下创立一个守时重启体系的使命也是无效的。
其他留意事项
新创立的cronjob,不会马上履行,至少要过2分钟才履行。假如重启cron则马上履行。
当crontab突然失效时,能够尝试/etc/init.d/crondrestart处理问题。或许检查日志看某个job有没有履行/报错tail-f/var/log/cron。
千万别乱运转crontab-r。它从Crontab目录(/var/spool/cron)中删去用户的Crontab文件。删去了该用户的一切crontab都没了。
在crontab中%是有特别意义的,表明换行的意思。假如要用的话有必要进行转义\%,如经常用的date‘+%Y%m%d’在crontab里是不会履行的,应该换成date‘+\%Y\%m\%d’。

未经允许不得转载:IT技术网站 » linux计划任务(crontab详解)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载