cron计划任务(转)

April 19, 2010 | tags 超级任务   | views
Comments 0
2010年04月01日

  

  在 Linux 中,使命可以被配备布置在指定的时间段、指定的日子、或体系均等载量低于指定的数目时不佣人的劳力运行。红帽企业 Linux 预配备布置了对于重要体系使命的运行,以便使体系可以容或不时被更新。譬如,被 locate 号令施用的 slocate 数值库逐日都被更新。体系办理员可施用不佣人的劳力化的使命来执行按期备份、监控体系、运行定制剧本等等。

  红帽企业 Linux 随带几个不佣人的劳力化使命的东西:cron、at、和 batch。 37.1. cron

  cron 是一个可以用来按照时间、日子、月份儿、礼拜的组合来调理对于反复使命的执行的看守保护进程项。

  cron 假设体系连续运行。要是当某使命被调理时体系不在运行,该使命就不会被执行。

  要施用 cron 办事,你必需安装了 vixie-cron RPM software包,并且必需在运行 crond 办事。要鉴定该software包是不是已经安装,施用 rpm -q vixie-cron 号令。要鉴定该办事是不是在运行,施用 /sbin/service crond status 号令。 37.1.1. 配备布置 cron 使命

  cron 的主配备布置文件是 /etc/crontab,它包孕底下几行: SHELL=/bin/bash

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

  MAILTO=root

  HOME=/

  # run-parts

  01 * * * * root run-parts /etc/cron.hourly

  02 4 * * * root run-parts /etc/cron.daily

  22 4 * * 0 root run-parts /etc/cron.weekly

  42 4 1 * * root run-parts /etc/cron.monthly

  前四行是用来配备布置 cron 使命运行情况的变量。SHELL 变量的值告诉体系要施用哪一个 shell 情况(在这个例子里是 bash shell);PATH 变量界说用来执行号令的路径。cron 使命的输出被邮寄给 MAILTO 变量界说的用户名。要是 MAILTO 变量被界说为空缺字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行号令或剧本时施用的主目次。 /etc/crontab 文件中的每行都代表一项使命,它的格局是: minute hour day month dayofweek command

  minute — 分钟,从 0 到 59 之间的不论什么整儿 hour — 钟头,从 0 到 23 之间的不论什么整儿 day — 日子,从 1 到 31 之间的不论什么整儿(要是指定了月份儿,必需是该月份儿的有效日子) month — 月份儿,从 1 到 12 之间的不论什么整儿(或施用月份儿的英文简写如 jan、feb 等等) dayofweek — 礼拜,从 0 到 7 之间的不论什么整儿,这搭的 0 或 7 代表礼拜日(或施用礼拜的英文简写如 sun、mon 等等) command — 要执行的号令(号令可所以 ls /proc >> /tmp/proc 什么的的号令,也可所以执行你自行编著的剧本的号令。) 在以上不论什么值中,星号(*)可以用来代表所有有效的值。譬如,月份儿值中的星号象征着在餍足其他制约前提后每月都执行该号令。

  整儿间的短线(-)指定一个整儿规模。譬如,1-4 象征着整儿 一、二、三、4。

  用逗点(,)离隔的一系列值指定一个列表。譬如,3, 4, 6, 8 标示这四个指定的整儿。

  正斜线(/)可以用来指定距离频率。在规模后加之 /<integer> 象征着在规模内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段界说每两分钟。距离频率值还可以和星号一路施用。例如,*/3 的值可以用在月份儿字段中暗示每三个月运行一次使命。

  开首为井号(#)的行是注解,不会被措置惩罚。

  如你在 /etc/crontab 文件中所见,它施用 run-parts 脚原来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目次中的剧本,这些个剧本被响应地每钟头、逐日、每周、或每月执行。这些个目次中的文件应该是 shell 剧本。

  要是某 cron 使命需要按照调理来执行,而不是每钟头、逐日、每周、或每月地执行,它可以被新增到 /etc/cron.d 目次中。该目次中的所有文件施用和 /etc/crontab 中同样的语法。 # record the memory 目前世界上最强大的国家ge of the system every monday

  # at 3:30AM in the file /tmp/meminfo

  30 3 * * mon cat /proc/meminfo >> /tmp/meminfo

  # run custom script the first day of every month at 4:10AM

  10 4 1 * * /root/scripts/backup.sh

  例 37-1. crontab 的例子 根用户之外的用户可以施用 crontab 东西来配备布置 cron 使命。所有效户界说的 crontab 都被生存在 /var/spool/cron 目次中,并施用创立它们的用户身份来执行。要以某用户身份创立一个 crontab 项目,登录为该用户,然后键入 crontab -e 号令,施用由 VISUAL 或 EDITOR 情况变量指定的编纂器来编纂该用户的 crontab。该文件施用的格局和 /etc/crontab 不异。当对于 crontab 所做的转变被生存后,该 crontab 文件就会按照该用户名被生存,并写入文件 /var/spool/cron/username 中。 cron 看守保护进程项每分钟都查抄 /etc/crontab 文件、etc/cron.d/ 目次、和 /var/spool/cron 目次中的转变。要是发了然转变,它们就会被载入内存。如许,当某个 crontab 文件转变后就没必要从头开始工作看守保护进程项了。 37.1.2. 节制对于 cron 的施用

  /etc/cron.allow 和 /etc/cron.deny 文件被用来限定对于 cron 的施用。这两个施用节制文件的格局都是每行一个用户。两个文件都不容吧可空格。要是施用节制文件被修改了,cron 看守保护进程项(crond)没必要被重启。施用节制文件在每次用户新增或删去一项 cron 使命时城市被读取。

  不管施用节制文件中的划定怎样,根用户都老是可以施用 cron。

  要是 cron.allow 文件存在,只有此中列出的用户才被许可施用 cron,并且 cron.deny 文件会被纰漏。

  要是 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被克制施用 cron。 37.1.3. 开始工作和遏制办事

  要开始工作 cron 办事,施用 /sbin/service crond start 号令。要遏制该办事,施用 /sbin/service crond stop 号令。保举你在指导时开始工作该办事。 ----- Linux——Crontab施用详解

  名称 : crontab

  施用职权范围 : 所有施用者

  施用体式格局 :

  crontab file [-u user]-用指定的文件替换今朝的crontab。

  crontab-[-u user]-用尺度输入替换今朝的crontab.

  crontab-1[user]-列出用户今朝的crontab.

  crontab-e[user]-编纂用户今朝的crontab.

  crontab-d[user]-删去用户今朝的crontab.

  crontab-c dir- 指定crontab的目次。

  crontab文件的格局:M H D m d cmd.

  基本格局 :

  * * * * * command

  分 时 日 月 周 号令

  M: 分钟(0-59)。每分钟用*或 */1暗示

  H:钟头(0-23)。(0暗示0点)

  D:天(1-31)。

  m: 月(1-12)。

  d: 一礼拜内的天(0~6,0为礼拜日)。

  cmd要运行的步伐,步伐被送入sh执行,这个shell只有USER,HOME,SHELL这三个情况变量

  申明 :

  crontab 是用来让施用者在固按时间或固定距离执行步伐之用,换言之,也就是近似施用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必需要有其职权范围(好比说是 root)才气够指定他人的时程表。要是不施用 -u user 的话,就是暗示设定本身的时程表。

  参量 :

  crontab -e : 执行书契编纂器来设按时程表,内部决定的书契编纂器是 VI,要是你想用别的书契编纂器,则请先设定 VISUAL 情况变数来指定施用阿谁书契编纂器(好比说 setenv VISUAL joe)

  crontab -r : 删去今朝的时程表

  crontab -l : 列出今朝的时程表

  crontab file [-u user]-用指定的文件替换今朝的crontab。

  时程表的格局如次 :

  f1 f2 f3 f4 f5 program

  此中 f1 是暗示分钟,f2 暗示钟头,f3 暗示一个月份儿中的第几日,f4 暗示月份儿,f5 暗示一个礼拜中的第几天。program 暗示要执行的步伐。

  当 f1 为 * 时暗示每分钟都要执行 program,f2 为 * 时暗示每钟头都要执行步伐,其馀类推

  当 f1 为 a-b 时暗示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时暗示从第 a 到第 b 钟头都要执行,其馀类推

  当 f1 为 */n 时暗示每 n 分钟个时间距离执行一次,f2 为 */n 暗示每 n 钟头个时间距离执行一次,其馀类推

  当 f1 为 a, b, c,... 时暗示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时暗示第 a, b, c...个钟头要执行,其馀类推

  施用者也能够将所有的设定先储存安放在档案 file 中,用 crontab file 的体式格局来设按时程表。

  例子 :

  #天天早上7点执行一次 /bin/ls :

  0 7 * * * /bin/ls

  在 12 月内, 天天的早上 6 点到 12 点中,每隔3个钟头执行一次 /usr/bin/backup :

  0 6-12/3 * 12 * /usr/bin/backup

  周一到周五每全国午 5:00 寄一封信给 alex@domain.name :

  0 17 * * 1-5 mail -s "你好" alex@domain.name < /tmp/maildata

  每月天天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"

  20 0-23/2 * * * echo "haha"

  注重 :

   当步伐在你所指定的时间执行后,体系会寄一封信给你,预示该步伐执行的内部实质意义,如果是你不但愿收到如许的信,请在每行空一格然后加之 > /dev/null 2>&1 便可

  例子2 :

  #天天早上6点10分

  10 6 * * * date

  #每两个钟头

  0 */2 * * * date

  #晚上11点到早上8点之间每两个钟头,早上8点

  0 23-7/2,8 * * * date

  #每月的4号和每一个礼拜的礼拜一到礼拜三的早上11点

  0 11 4 * mon-wed date

  #1月份儿日早上4点

  0 4 1 jan * date

  典范

  $crontab -l 列出用户今朝的crontab.

  /usr/lib/cron/cron.allow暗示谁能施用crontab命 令。要是它是一个具文件表白没有一个用户能摆设功课。要是这个文件不存在,而有别的一个文件/usr/lib/cron/cron.deny,则只有不包 括在这个文件中的用户才可以施用crontab号令。要是它是一个具文件表白不论什么用户均可摆设功课。两个文件同时存在时cron.allow优先,要是都 不存在,只有超等用户可以摆设功课。

  crontab文件的一些例子:

  30 21 * * * /usr/local/etc/rc.d/lighttpd restart

  上边的例子暗示每晚的21:30重启apache。

  45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

  上边的例子暗示每月一、十、22日的4 : 45重启apache。

  10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

  上边的例子暗示每周6、周日的1 : 10重启apache。

  0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

  上边的例子暗示在天天18 : 00至23 : 00之间每隔30分钟重启apache。

  0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

  上边的例子暗示每礼拜六的11 : 00 pm重启apache。

  * */1 * * * /usr/local/etc/rc.d/lighttpd restart

  每钟头重启apache

  * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

  晚上11点到早上7点之间,每隔一钟头重启apache

  0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

  每月的4号与每周一到周三的11点重启apache

  0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

  一月一号的4点重启apache

  例子:

  每两个时间值中心施用逗点分隔。

  除开数码另有几个个特殊的符号就是”*”、”/”和”-”、”,”,*代表所有的取值规模内的数码,”/”代表每的意思,”*/5″暗示每5个单元,”-”代表从某个数码到某个数码,”,”分隔几个失散的数码。

  天天早上6点

  0 6 * * * echo "Good morning." >> /tmp/test.txt //注重纯真echo,从荧幕上看不到不论什么输出,由于cron把不论什么输出都email到root的邮箱了。

  每两个钟头

  0 */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

  每次编纂完某个用户的cron设置后,cron不佣人的劳力在/var/spool /cron下天生一个与此用户重名的文件,此用户的cron信息都记载在这个文件中,这个文件是不成以直接编纂的,只可以用crontab -e 来编纂。cron开始工作后每过一份钟读一次这个文件,查抄是不是要执行内里的号令。是以资文件修改后不需要从头开始工作cron办事。

  2.编纂/etc/crontab 文件配备布置cron

  cron 办事每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,是以咱们配备布置这个文件也能运用cron办事 做一些工作。用crontab配备布置是针对于某个用户的,而编纂/etc/crontab是针对于体系的使命。此文件的文件格局是:

  SHELL=/bin/bash

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

  MAILTO=root //要是呈现纰缪,或有数值输出,数值作为邮件发给这个帐号

  HOME=/ //施用者运行的路径,这搭是根目次

  # run-parts

  01 * * * * root run-parts /etc/cron.hourly //每钟头执行/etc/cron.hourly内的剧本

  02 4 * * * root run-parts /etc/cron.daily //天天执行/etc/cron.daily内的剧本

  22 4 * * 0 root run-parts /etc/cron.weekly //每礼拜执行/etc/cron.weekly内的剧本

  42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的剧本

  各人注重"run-parts"这个参量了,要是去失这个参量的话,后面就能够写要运行的某个剧本名,而不是文件夹名了。

  5,15,25,35,45,55 16,17,18 * * * command

  这就是暗示肆意天肆意月,实在就是天天的下战书4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行号令。

  [例] 在每周一,三,五的下战书3:00体系步入维护状况,从头开始工作体系。那末在crontab 文件中就应该写入如次字段:

  00 15 * * 1,3,5 shutdown -r 5

  然后将该文件保存到磁盘为foxy.cron,再键入crontab foxy.cron安装该文件。

  [例] 每钟头的10分,40分执行用户目次下的innd/bbslin这个指令:

  10,40 * * * * innd/bbslink

  [例] 每钟头的1分执行用户目次下的bin/account这个指令:

  1 * * * * bin/account

  [例] 天天清晨三点二十分执行用户目次下如次所示的两个指令(每一个指令以;分隔):

  20 3 * * * (/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,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt

  [例] 咱们来看一个超等用户的crontab文件:

  #Run the ‘atrun’ program every minutes

  #T你好s runs anyt你好ng that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.

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

  40 7 * * * updatedb

  8,10,22,30,39,46,54,58 * * * * /bin/sync crontab仅只是一个文本文件,可以用不论什么UNIX编纂器编纂它。它可以包罗4种代码行:空行、注解、情况变量设置和号令。

  ① 空行和注解

  文件中的空行和骈枝的空格被纰漏。空行和空格有助于提高crontab的可读性,使crontab社团有序。还可以施用注解对于每一个功课的时间表和用场加以申明。要想创立注解,只需在一行的开首加之一个井号(#)。

  ② 情况变量和号令

  cron终极施用一个Shell执行每一个号令。可以路程经过过程情况变量修改或定制Shell的举动。

  cron预界说了5个情况变量:

  PATH的默许值是/usr/bin:/bin。

  SHELL设计置为/bin/sh。

  LOGNAME初始化为crontab所有者的用户名。

  HOME设置为crontab所有者的主目次,好比/home/joe。

  使成为事实按时task的两种体式格局

  一种是编纂一个文件,用crontab 载入

  一种是用crontab -e 直接编纂起作用

  1-59 * * * * echo `date`" lj\n" >> /opt/lijie/lj.txt date 用单引号,是暗示要是date是一个号令,就作为号令执行

  要是你直接用date ,那末输出的是"date"这个字符串,而不是date这个号令的执行成果

  出格注重:

  1, 要是用crontab 文件来载入按时使命,将会冲失按时使命

  所以要是要新增按时使命,最佳就用crontab -e来新增按时使命

  不要用crontab 文件。

  2, crontab的日记文件为 /var/log/cron

  3, 要是施用 crontab <filename> 来设置cron,绝对于是要注重文件杂乱的符号的问题。我就遇到一个问题,/var/log/cron 日记内里预示 Dec 28 11:34:00 TARGET CROND[13449]: (hnuc) CMD (/home/hnuc/shell/t.sh^M) 后面的~M是杂乱的符号,缘故原由是:我是施用editplus编纂的cron file,内里的回车换行符号是dos的而不是linux或unix的。这搭的^M 现实上是个dos的换行符,在linux情况下剖析成这个了。

  MAILTO设置为crontab所有者的名称。 要想修改这些个默许值或设置不论什么变量,只需在crontab中设置适当的情况变量。