crontab定时运行命令

sghakww 贡献于2012-01-12

作者 LGP  创建于2008-03-20 02:27:00   修改者微软用户  修改于2009-12-25 08:49:00字数15377

文档摘要:linux定时运行程序转crontab,无论root还是user都可以用。基本用法: 1.crontab-l 列出当前的crontab任务 2.crontab-d删除当前的crontab任务 3.crontab-e(solaris5.8上面是crontab-r)编辑一个crontab任务,ctrl_D结束 4.crontabfilename  以filename做为crontab的任务列表文件并载入crontabfile的格式: crontab文件中的行由。
关键词:

 linux 定时运行程序 转 crontab,无论root还是user都可以用。 基本用法:  1. crontab -l      列出当前的crontab任务  2. crontab -d      删除当前的crontab任务  3. crontab -e (solaris5.8上面是 crontab -r)      编辑一个crontab任务,ctrl_D结束  4. crontab filename      以filename做为crontab的任务列表文件并载入 crontab file的格式:     crontab 文件中的行由 6 个字段组成,不同字段间用空格或 tab 键分隔。前 5 个字段指定命令要运行的时间        分钟 (0-59)        小时 (0-23)        日期 (1-31)        月份 (1-12)        星期几(0-6,其中 0 代表星期日)        第 6 个字段是一个要在适当时间执行的字符串 例子:       #MIN HOUR DAY MONTH DAYOFWEEK COMMAND       #每天早上6点10分       10 6 * * * date       #每两个小时       0 */2 * * * date    (solaris 5.8似乎不支持此种写法)       #晚上11点到早上8点之间每两个小时,早上8点       0 23-7/2,8 * * * date       #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点       0 11 4 * mon-wed date       #1月份日早上4点       0 4 1 jan * date    [例7]    # crontab -l #列出用户目前的crontab。    10 6 * * * date    0 */2 * * * date    0 23-7/2,8 * * * date    #    在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:    minute hour day-of-month month-of-year day-of-week commands    第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用*代替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。在表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点  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   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"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。     [例8]    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时执行命令。    [例9] 在每周一,三,五的下午3:00系统进入维护状态,重新启动系统。那么在crontab 文件中就应该写入如下字段:    00 15 * * 1,3,5 shutdown -r +5    然后将该文件存盘为foxy.cron,再键入crontab foxy.cron安装该文件。    [例10] 每小时的10分,40分执行用户目录下的innd/bbslin这个指令:    10,40 * * * * innd/bbslink    [例11] 每小时的1分执行用户目录下的bin/account这个指令:    1 * * * * bin/account    [例12] 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):    20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)    [例13] 每年的一月和四月,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    [例14] 我们来看一个超级用户的crontab文件:    #Run the ‘atrun’ program every minutes    #This runs anything 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    进程的挂起及恢复命令bg、fg    作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按〈ctrl+z$#@62;,即可挂起当前的前台作业。    [例15]    $ cat text.file    〈ctrl+z$#@62;    [1] + stopped cat text.file    $ jobs    [1]+ stopped cat text.file    在键盘上按〈ctrl+z$#@62;后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。    恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。    [例16] 用户正在使用Emacs,突然需要查看系统进程情况。就首先使用〈Ctrl+z$#@62;组合键将Emacs进程挂起,然后使用bg命令将其在后台启动,这样就得到了前台的操作控制权,接着键入“ps ?x”查看进程情况。查看完毕后,使用fg命令将Emacs带回前台运行即可。其命令格式为:    〈Ctrl+z$#@62;    $ bg emacs    $ ps ?x    $ fg emacs    默认情况下,fg和bg命令对最近停止的作业进行操作。如果希望恢复其他作业的运行,可以在命令中指定要恢复作业的作业号来恢复该作业。例如:    $ fg 1    cat text.file 文件 含义 /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],其参数含义如表一: 参数名称 含义 示例 -l 显示用户的Crontab文件的内容 crontabl –l -i 删除用户的Crontab文件前给提示 crontabl -ri -r 从Crontab目录中删除用户的Crontab文件 crontabl -r -e 编辑用户的Crontab文件 crontabl -e 用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。 它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段, 格式如下:* * * * * 其时间段的含义如表二: 段 含义 取值范围 第一段 代表分钟 0—59 第二段 代表小时 0—23 第三段 代表日期 1—31 第四段 代表月份 1—12 第五段 代表星期几,0代表星期日 0—6 例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’ 示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间): 1.     以普通用户登录linux系统(我用的是CentOS4.1) 2.     $crontab –e 说明:系统默认的编辑器是VIM,如果不是请加上以下shell:       $EDITOR=vi       $export EDITOR 3.     输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM 4.     $su root 5.     $cd /etc/init.d 6.     ./crond restart 下面看看看几个具体的例子: ● 0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache ● 50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 ● 50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 ● 0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 ● 1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 ● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。 ● 30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令 Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中: 文件 含义 /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],其参数含义如表一: 参数名称 含义 示例 -l 显示用户的Crontab文件的内容 crontabl –l -i 删除用户的Crontab文件前给提示 crontabl -ri -r 从Crontab目录中删除用户的Crontab文件 crontabl -r -e 编辑用户的Crontab文件 crontabl -e 用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。 它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段, 格式如下:* * * * * 其时间段的含义如表二: 段 含义 取值范围 第一段 代表分钟 0—59 第二段 代表小时 0—23 第三段 代表日期 1—31 第四段 代表月份 1—12 第五段 代表星期几,0代表星期日 0—6 例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’ 示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间): 1.     以普通用户登录linux系统(我用的是CentOS4.1) 2.     $crontab –e 说明:系统默认的编辑器是VIM,如果不是请加上以下shell:       $EDITOR=vi       $export EDITOR 3.     输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM 4.     $su root 5.     $cd /etc/init.d 6.     ./crond restart 下面看看看几个具体的例子: ● 0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache ● 50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 ● 50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 ● 0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 ● 1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 ● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。 ● 30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令 Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中: 文件 含义 /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],其参数含义如表一: 参数名称 含义 示例 -l 显示用户的Crontab文件的内容 crontabl –l -i 删除用户的Crontab文件前给提示 crontabl -ri -r 从Crontab目录中删除用户的Crontab文件 crontabl -r -e 编辑用户的Crontab文件 crontabl -e 用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。 它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段, 格式如下:* * * * * 其时间段的含义如表二: 段 含义 取值范围 第一段 代表分钟 0—59 第二段 代表小时 0—23 第三段 代表日期 1—31 第四段 代表月份 1—12 第五段 代表星期几,0代表星期日 0—6 例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’ 示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间): 1.     以普通用户登录linux系统(我用的是CentOS4.1) 2.     $crontab –e 说明:系统默认的编辑器是VIM,如果不是请加上以下shell:       $EDITOR=vi       $export EDITOR 3.     输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM 4.     $su root 5.     $cd /etc/init.d 6.     ./crond restart 下面看看看几个具体的例子: ● 0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache ● 50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 ● 50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 ● 0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 ● 1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 ● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。 ● 30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令 linux下统计文件数目 MySQL服务器安装完之后如何调节性能 LINUX crontab 定期任务 Published by admin, at 10:27, 2007, under Linux系统 Jun 14 作者:北南南北 来自:LinuxSir.Org 摘要:Linux操作系统中,计划任务通常由cron来承担,了解或掌握cron,能为我们管理服务器带来更多的便利,也能省却更多的时间。本文也举了一些简单明了的例子,为了让新手上路方便; 目录 1、计划任务概说; 2、cron; 2.1 cron 的安装和启动; 2.1.1 在Redhat 或 Fedora等RPM包管理的系统的安装; 2.1.2 在Slackware系统中的安装; 2.1.3 cron 的开启、停止、重新启动方法; 2.2 cron 配置文件; 2.2.1 全局性配置文件; 2.2.2 cron 配置计划任务的书写格式 2.2.3 关于同一时间,同时执行多个任务的定义方法; 2.2.4 对于用户自身的cron 配置文件的说明; 3、计划任务的应用范围; 4、关于本文; 5、后记; 6、参考文档; 7、相关文档; ++++++++++++++++++++++++++++++++++++++ 正文 ++++++++++++++++++++++++++++++++++++++ 1、计划任务概说; 计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 crond 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务; 下面我们先来说说cron; 2、cron; 在 Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件 /etc/crontab,以及每个用户的计划任务配置文件),然后 cron会根据命令和执行时间来按时来调用度工作任务。 2.1 cron 的安装和启动; 在一般情况下,cron都是系统默认安装的,我们要学会查看软件包是否已经安装; 2.1.1 在Redhat 或 Fedora等RPM包管理的系统的安装; 判断系统是否已经安装cron相关的包 Fedora 5.0 系统的情况; 其它版本的Fedora及Redhat的系统和这相似; [root@localhost ~]# rpm -qa |grep cron vixie-cron-4.1-54.FC5 anacron-2.3-36.1 crontabs-1.10-7.1 其中vixie-cron软件包是cron的主程序,您可以通过下面的命令来了解它,其它软件包同理; [root@localhost beinan]# rpm -ql vixie-cron crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。cron 守护进程检查 crontab 文件来查看某个指定命令被调度执行的时间。如果命令已经调度,守护进程就会执行它们。了解crontabs软件包都安装了些什么,应该用下面的命令; [root@localhost beinan]# rpm -ql crontabs 如果没有安装,可以从光盘中找出文件名带有cron字样的软件包来安装。 [root@localhost ~]# rpm -ivh vixie-cron-4.1-54.FC5* [root@localhost ~]# rpm -ivh crontabs* 也可以用yum 来在线安装; [root@localhost ~]# yum install vixie-cron [root@localhost ~]# yum install crontabs 2.1.2 在Slackware系统中的安装; 在Slackware中cron软件包是 dcron,您可以在光盘中找出来安装它; 查看是否已经安装了dcron软件包,您可以这样查看。在这里能列出软件包详细的安装情况; [root@localhost ~]# more /var/adm/packages/dcron* 如果没有安装,请用下面的命令来安装。在第一张安装盘中找出dcron软件包; [root@localhost ~]# installpkg dcron*.tgz 2.1.3 cron 的开启、停止、重新启动方法; cron配置文件被修改后,想让新文件生效,必须重新crond服务器,有两种方法可供选择; 第一种 在Fedora或Redhat 等以RPM包管理的系统中; [root@localhost ~]# /etc/init.d/crond start [root@localhost ~]# /etc/init.d/crond stop [root@localhost ~]# /etc/init.d/crond restart 如果想在Fedora 和 Redhat 或以这些发行版为基础克隆的发行版,如果想自动开机运行,请用下面的办法; [root@localhost ~]# chkconfig --levels 35 crond on 第二种:通用 [root@localhost ~]# pgrep crond 注:判断crond 是否在运行; [root@localhost ~]# pkill crond 注:杀掉正在运行中的crond; [root@localhost ~]# pgrep crond 注:查看是否被杀掉了; [root@localhost ~]# /usr/sbin/crond 注:运行crond; 2.2 cron 配置文件; cron 是一个服务器程序,我们都知道Linux的服务器的配置,大多是通过配置文件来完成的,cron自然也不例外,在Redhat/Fedora 等系统中它的全局性配置文件是/etc/crontab;在Slackware系统中,全局性文件是/var/spool/cron/crontabs /root 。每个用户也有自己的cron配置文件,我们可以通过crontab -e 来编辑它; 2.2.1 全局性配置文件; 下面是一个全局性的配置文件例子,以Fedora Core 5为例; [root@localhost ~]# more /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 1 * * * * root run-parts /etc/cron.hourly # 2 4 * * * root run-parts /etc/cron.daily # 22 4 * * 7 root run-parts /etc/cron.weekly # 42 4 1 * * root run-parts /etc/cron.monthly # 0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg 对于全局性配置文件,我们要用root权限来更改,一般是通过crontab -e 来修改。但有时也并不一定是这样的,比如Fedora Core 5 如果通过crontab -e 修改的是root用户的cron 配置文件。所以我们要在Fedora Core 5中修改全局性配置文件可以用vi 编辑器来修改。vi的用法请参考:《文件编辑器 vi》 在全局性配置文件中,定义了可执行命令的路径环境变量,所用SHELL类型的定义等,这些大多不用修改;我们经常添加的是计划任务或修改任务执行的时间等; 在全局性配置文件中,我们发现有类似这些行; 1 * * * * root run-parts /etc/cron.hourly 注:表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本; 2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本; 22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7个周4点我22分,开始执行 /etc/cron.weekly目录下的可执行程序或脚本; 42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4点42分,开始执行/etc/cron.monthly目录下的可执行程序或脚本; 这些行是用来在同一时间批量执行任务的,我们在以后的例子中独立出来解说,在这里只是让大家心中有数; 2.2.2 cron 配置计划任务的书写格式 分钟 小时 日 月 周 [用户名] 命令 说明: 第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59 第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23 第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31 第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12 第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。 每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略; 第七段应该定义的是:执行的命令和参数。 注:其中用户名可是省略,用户名定义的是程序用哪个用户来执行,比如mysql服务器,我们可以定义成以mysql用户来启动、停止、重新启动,这时要写上用户名;不过对于cron来说意义不是太大,因为每个用户都有自己的cron配置文件。有些程序的启动必须用到root用户,这时我们就可以修改root用户的cron配置文件就行了。在每个用户的配置文件中,不必指定用户名。 我们可以把计划任务写在全局性配置文件中,如果您想把一个计划放入全局性配置文件中,就得改发行版所对应的cron全局配置文件,比如Fedora 5的全局性配置文件是/etc/crontab文件; 每个用户也能定义自己的cron配置文件,用crontab -e 命令来定义; 举一例:让机器在每天8点30分重新启动; 关于时间格式中有7个字段。我们可以直接更改或者添加,当然这是系统任务调用。举个例子,比如我在每天的早上8点30分重新启动机器,就可以在 /etc/crontab中加入下面的两句,第一句就是注释了。以#号开始,后面写一个自己能知道这是什么任务的备注; # reboot OS 30 8 * * * root /sbin/reboot 第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59 第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23 第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31 第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12 第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中 0表示星期日。 每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略; 第七段应该定义的是:执行的命令和参数。 对比上面的例子就知道,30是不是分钟??8是不是小时?如果有*代表的地方,表示全部,也就是说,每个月,每天,每星期都要执行。root 表示用root用户执行,命令是/sbin/reboot ,也就是说,系统在每天 8点30分重新启动; 我们可以把每天8点30分重新启动的计划任务写入cron全局性配置文件中,也可以定义在root用户自己的cron配置文件中。如果定义在root自己的配置文件,请用root身份来执行 crontab -e 来修改配置文件;crontab -e 进入修改配置文件的过程,其实和vi的用法一样,请参看vi 的用法:《文件编辑器 vi》 让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后。也要重新启动cron服务器。 在Fedora 和Redhat中,我们应该用; [root@localhost ~]# /etc/init.d/crond restart 如果让crond 在开机时运行,应该改变其运行级别; [root@localhost ~]# chkconfig --levels 35 crond on 在Slackware中,如果开机自动运行; 查看/etc/rc.d/rc.M文件是否有如的行,如果没有就加上,大多是有的; # Start crond (Dillon's crond): if [ -x /usr/sbin/crond ]; then /usr/sbin/crond -l10 >>/var/log/cron 2>&1 如果想让立即让cron重启生效,也可以用下面的办法; [root@localhost ~]# pgrep crond 注:查看crond服务器是否运行; 2022 [root@localhost ~]# pkill crond 注:杀死crond; [root@localhost ~]# pgrep crond 注:查看crond是否退出; [root@localhost ~]# /usr/sbin/crond 注:启动crond; [root@localhost ~]# pgrep crond 注:查看crond 是否已经运行得起来了; 3883 2.2.3 关于同一时间,同时执行多个任务的定义方法; 我们在前面已经说过,在全局性配置文件中,有类似如下的段落; 1 * * * * root run-parts /etc/cron.hourly 注:表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本; 2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本; 22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7个周4点我22分,开始执行 /etc/cron.weekly目录下的可执行程序或脚本; 42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4点42分,开始执行/etc/cron.monthly目录下的可执行程序或脚本; 举例来说,我想在每天5点10分来重新启动httpd 服务器,与此同时,我们也可以同时下载一个ISO文件。如果我们按书写计划任务的规则一条一条的来书写,并添加到全局是有点麻烦。不如写一个脚本放在 /etc/crond.daily目录中。然后把其权限设置为755 (关于权限的设置,请参考:《Linux 文件和目录的属性》)。 当然我们得改一改上面的 带有/etc/cron.daily那行,改为如下; 10 5 * * * root run-parts /etc/cron.daily 然后我们到/etc/crond.daily目录中创建两个文件,一个是用来重启httpd服务器的,如下; [root@localhost cron.daily]# touch httpd.sh [root@localhost cron.daily]# chmod 755 httpd.sh [root@localhost cron.daily]# echo "/etc/init.d/httpd restart" > httpd.sh [root@localhost cron.daily]# more httpd.sh /etc/init.d/httpd restart 如果我想在每天5点20分下载FC5的镜像,可以再创建一个文件fc5down.sh [root@localhost cron.daily]# touch fc5down.sh [root@localhost cron.daily]# chmod 755 fc5down.sh [root@localhost cron.daily]# echo "/usr/bin/wget http://mirrors.kernel.org/..." > fc5down.sh [root@localhost cron.daily]# more fc5down.sh /usr/bin/wget http://mirrors.kernel.org/... 然后我们重新启动一下crond就行了; [root@localhost cron.daily]# pkill crond [root@localhost cron.daily]# prep crond [root@localhost cron.daily]# crond& 注意:我只是想说明一下,在同一时间执行多个计划任务的简单用法,并不是有意教给您每天早上都下载FC5的映像。我举这个例子是为了初学者了解这个功能。如果您有好多的任务在某一时刻执行,那就自己写脚本文件。放在/etc目录下的cron.hourly 、cron.daily 、cron.weekly 、cron.monthly 目录中。凡是放进这些目录的可执行脚本,都能在约定的时间内准确执行。每个目录有每个目录的用途; 2.2.4 对于用户自身的cron 配置文件的说明; 每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般的情况下,在Fedora和Redhat的发行版,我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var /spool/cron/目录中,文件以用户名命名。在Slackware中是位于/var/spool/cron/crontabs/目录中。其它的发行版都差不多,有点类似。自己找找吧;查看用户的计划任务是crontab -l crontab -e 注:编辑用户的cron配置文件; crontab -l 注:查看用户的计划任务; 比如我用beinan用户来运行crontab -e ; [beinan@localhost ~]$ id 注:判断所用用户身份; uid=500(beinan) gid=500(beinan) groups=500(beinan) [beinan@localhost ~]$ crontab -e 注:编辑用户beinan的计划任务; 我们在里面定义一个任务; 40 20 * * * /usr/bin/wget http://mirrors.kernel.org/... 保存退出后,我们用下面的命令来查看beinan用户的计划任务; [beinan@localhost ~]$ crontab -l 40 20 * * * /usr/bin/wget http://mirrors.kernel.org/... 配置好后,我们还要重新启动crond服务器,每个用户cron配置文件的改动都得重新启动crond服务器;前面已经说过了,这里省略;值得注意的是重启crond服务器,需要root权限,您可以用su命令切换到root 用户,然后再来重启crond; 在Fedora或Redhat等以RPM包管理的发行版中; [beinan@localhost ~]$ su 口令: [root@localhost beinan]# /etc/init.d/crond restart 停止 crond: [确定] 启动 crond: [确定] 也可以先杀死crond,再运行crond命令的办法来启动; [root@localhost beinan]# pkill crond [root@localhost beinan]# pgrep crond [root@localhost beinan]# /usr/sbin/crond [root@localhost beinan]# pgrep crond 6664 3、计划任务的应用范围; 计划任务主要是让系统自动完成一些工作。比如我们可以让系统自动在某一时刻清理或备份httpd服务器的日志,然后重新启动httpd服务器,这对网络管理员来说是很重要的。也可以让系统自动清空位于/tmp目录的垃圾文件。 另外值得一提的是,LinuxSir.Org 有很多子站,每个子站都有RSS,能让这些站点的RSS相互投递,也是用cron来完成,比如是在早上4点左右开始执行这个任务。这是一个极为耗费资源的过程,如果不是放在在线人少的时候,基本无法完成,所以只能放在早上进行。作为SIR的管理员,不可能每天早上4点起来点鼠标来完成这些事吧。所以最好的办法就是通过cron来自动运行,以在服务器最清闲的时候来完成这项工作;

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档