计划linux cron配置和说明.docx
《计划linux cron配置和说明.docx》由会员分享,可在线阅读,更多相关《计划linux cron配置和说明.docx(16页珍藏版)》请在冰豆网上搜索。
计划linuxcron配置和说明
目录
1、计划任务概说;
2、cron;
2.1cron的安装和启动;
2.1.1在Redhat或Fedora等RPM包管理的系统的安装;
2.1.2在Slackware系统中的安装;
2.1.3cron的开启、停止、重新启动方法;
2.2cron配置文件;
2.2.1全局性配置文件;
2.2.2cron配置计划任务的书写格式
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.1cron的安装和启动;
在一般情况下,cron都是系统默认安装的,我们要学会查看软件包是否已经安装;
2.1.1在Redhat或Fedora等RPM包管理的系统的安装;
判断系统是否已经安装cron相关的包
Fedora5.0系统的情况;
其它版本的Fedora及Redhat的系统和这相似;
[root@localhost~]#rpm-qa|grepcron
vixie-cron-4.1-54.FC5
anacron-2.3-36.1
crontabs-1.10-7.1
其中vixie-cron软件包是cron的主程序,您可以通过下面的命令来了解它,其它软件包同理;
[root@localhostbeinan]#rpm-qlvixie-cron
crontabs软件包是用来安装、卸装、或列举用来驱动cron守护进程的表格的程序。
cron守护进程检查crontab文件来查看某个指定命令被调度执行的时间。
如果命令已经调度,守护进程就会执行它们。
了解crontabs软件包都安装了些什么,应该用下面的命令;
[root@localhostbeinan]#rpm-ql crontabs
如果没有安装,可以从光盘中找出文件名带有cron字样的软件包来安装。
[root@localhost~]#rpm-ivhvixie-cron-4.1-54.FC5*
[root@localhost~]#rpm-ivhcrontabs*
也可以用yum来在线安装;
[root@localhost~]#yuminstallvixie-cron
[root@localhost~]#yuminstallcrontabs
2.1.2在Slackware系统中的安装;
在Slackware中cron软件包是dcron,您可以在光盘中找出来安装它;
查看是否已经安装了dcron软件包,您可以这样查看。
在这里能列出软件包详细的安装情况;
[root@localhost~]#more/var/adm/packages/dcron*
如果没有安装,请用下面的命令来安装。
在第一张安装盘中找出dcron软件包;
[root@localhost~]#installpkgdcron*.tgz
2.1.3cron的开启、停止、重新启动方法;
cron配置文件被修改后,想让新文件生效,必须重新crond服务器,有两种方法可供选择;
第一种在Fedora或Redhat等以RPM包管理的系统中;
[root@localhost~]#/etc/init.d/crondstart
[root@localhost~]#/etc/init.d/crondstop
[root@localhost~]#/etc/init.d/crondrestart
如果想在Fedora和Redhat或以这些发行版为基础克隆的发行版,如果想自动开机运行,请用下面的办法;
[root@localhost~]#chkconfig--levels35crondon
第二种:
通用
[root@localhost~]#pgrepcrond 注:
判断crond是否在运行;
[root@localhost~]#pkillcrond 注:
杀掉正在运行中的crond;
[root@localhost~]#pgrepcrond 注:
查看是否被杀掉了;
[root@localhost~]#/usr/sbin/crond 注:
运行crond;
2.2cron配置文件;
cron是一个服务器程序,我们都知道Linux的服务器的配置,大多是通过配置文件来完成的,cron自然也不例外,在Redhat/Fedora等系统中它的全局性配置文件是/etc/crontab;在Slackware系统中,全局性文件是/var/spool/cron/crontabs/root。
每个用户也有自己的cron配置文件,我们可以通过crontab-e来编辑它;
2.2.1全局性配置文件;
下面是一个全局性的配置文件例子,以FedoraCore5为例;
[root@localhost~]#more/etc/crontab
SHELL=/bin/bash
PATH=/sbin:
/bin:
/usr/sbin:
/usr/bin
MAILTO=root
HOME=/
#run-parts
1****rootrun-parts/etc/cron.hourly
#
24***rootrun-parts/etc/cron.daily
#
224**7rootrun-parts/etc/cron.weekly
#
4241**rootrun-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来修改。
但有时也并不一定是这样的,比如FedoraCore5如果通过crontab-e修改的是root用户的cron配置文件。
所以我们要在FedoraCore5中修改全局性配置文件可以用vi编辑器来修改。
vi的用法请参考:
《文件编辑器vi》
在全局性配置文件中,定义了可执行命令的路径环境变量,所用SHELL类型的定义等,这些大多不用修改;我们经常添加的是计划任务或修改任务执行的时间等;
在全局性配置文件中,我们发现有类似这些行;
1****rootrun-parts/etc/cron.hourly 注:
表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本;
24***rootrun-parts/etc/cron.daily 注:
表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本;
224**7rootrun-parts/etc/cron.weekly注:
每年第7个周4点我22分,开始执行/etc/cron.weekly目录下的可执行程序或脚本;
4241**rootrun-parts/etc/cron.monthly注:
每月第1天的4点42分,开始执行/etc/cron.monthly目录下的可执行程序或脚本;
这些行是用来在同一时间批量执行任务的,我们在以后的例子中独立出来解说,在这里只是让大家心中有数;
2.2.2cron配置计划任务的书写格式
分钟小时日 月 周 [用户名] 命令
说明:
第一段应该定义的是:
分钟,表示每个小时的第几分钟来执行。
范围是从0-59
第二段应该定义的是:
小时,表示从第几个小时来执行,范围是从0-23
第三段应该定义的是:
日期,表示从每个月的第几天执行,范围从1-31
第四段应该定义的是:
月,表示每年的第几个月来执行,范围从1-12
第五段应该定义的是:
周,表示每周的第几天执行,范围从0-6,其中0表示星期日。
每六段应该定义的是:
用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;
第七段应该定义的是:
执行的命令和参数。
注:
其中用户名可是省略,用户名定义的是程序用哪个用户来执行,比如mysql服务器,我们可以定义成以mysql用户来启动、停止、重新启动,这时要写上用户名;不过对于cron来说意义不是太大,因为每个用户都有自己的cron配置文件。
有些程序的启动必须用到root用户,这时我们就可以修改root用户的cron配置文件就行了。
在每个用户的配置文件中,不必指定用户名。
我们可以把计划任务写在全局性配置文件中,如果您想把一个计划放入全局性配置文件中,就得改发行版所对应的cron全局配置文件,比如Fedora5的全局性配置文件是/etc/crontab文件;
每个用户也能定义自己的cron配置文件,用crontab-e命令来定义;
举一例:
让机器在每天8点30分重新启动;
关于时间格式中有7个字段。
我们可以直接更改或者添加,当然这是系统任务调用。
举个例子,比如我在每天的早上8点30分重新启动机器,就可以在
/etc/crontab中加入下面的两句,第一句就是注释了。
以#号开始,后面写一个自己能知道这是什么任务的备注;
#rebootOS
308*** 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/crondrestart
如果让crond在开机时运行,应该改变其运行级别;
[root@localhost~]#chkconfig--levels35crondon
在Slackware中,如果开机自动运行;
查看/etc/rc.d/rc.M文件是否有如的行,如果没有就加上,大多是有的;
#Startcrond(Dillon'scrond):
if[-x/usr/sbin/crond];then
/usr/sbin/crond-l10>>/var/log/cron2>&1
如果想让立即让cron重启生效,也可以用下面的办法;
[root@localhost~]#pgrepcrond 注:
查看crond服务器是否运行;
2022
[root@localhost~]#pkillcrond注:
杀死crond;
[root@localhost~]#pgrepcrond注:
查看crond是否退出;
[root@localhost~]#/usr/sbin/crond 注:
启动crond;
[root@localhost~]#pgrepcrond 注:
查看crond是否已经运行得起来了;
3883
2.2.3关于同一时间,同时执行多个任务的定义方法;
我们在前面已经说过,在全局性配置文件中,有类似如下的段落;
1****rootrun-parts/etc/cron.hourly 注:
表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本;
24***rootrun-parts/etc/cron.daily 注:
表示每天的4点2分,开始执行/etc/cron.daily目录下的可执行程序或脚本;
224**7rootrun-parts/etc/cron.weekly注:
每年第7个周4点我22分,开始执行/etc/cron.weekly目录下的可执行程序或脚本;
4241**rootrun-parts/etc/cron.monthly注:
每月第1天的4点42分,开始执行/etc/cron.monthly目录下的可执行程序或脚本;
举例来说,我想在每天5点10分来重新启动httpd服务器,与此同时,我们也可以同时下载一个ISO文件。
如果我们按书写计划任务的规则一条一条的来书写,并添加到全局是有点麻烦。
不如写一个脚本放在/etc/crond.daily目录中。
然后把其权限设置为755(关于权限的设置,请参考:
《Linux文件和目录的属性》)。
当然我们得改一改上面的带有/etc/cron.daily那行,改为如下;
105***rootrun-parts/etc/cron.daily
然后我们到/etc/crond.daily目录中创建两个文件,一个是用来重启httpd服务器的,如下;
[root@localhostcron.daily]#touchhttpd.sh
[root@localhostcron.daily]#chmod755httpd.sh
[root@localhostcron.daily]#echo"/etc/init.d/httpdrestart">httpd.sh
[root@localhostcron.daily]#morehttpd.sh
/etc/init.d/httpdrestart
如果我想在每天5点20分下载FC5的镜像,可以再创建一个文件fc5down.sh
[root@localhostcron.daily]#touchfc5down.sh
[root@localhostcron.daily]#chmod755fc5down.sh
[root@localhostcron.daily]#echo"/usr/bin/wget http:
//mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso">fc5down.sh
[root@localhostcron.daily]#morefc5down.sh
/usr/bin/wget http:
//mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso
然后我们重新启动一下crond就行了;
[root@localhostcron.daily]#pkillcrond
[root@localhostcron.daily]#prepcrond
[root@localhostcron.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的计划任务;
我们在里面定义一个任务;
4020*** /usr/bin/wget http:
//mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso
保存退出后,我们用下面的命令来查看beinan用户的计划任务;
[beinan@localhost~]$crontab-l
4020*** /usr/bin/wget http:
//mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso
配置好后,我们还要重新启动crond服务器,每个用户cron配置文件的改动都得重新启动crond服务器;前面已经说过了,这里省略;值得注意的是重启crond服务器,需要root权限,您可以用su命令切换到root用户,然后再来重启crond;
在Fedora或Redhat等以RPM包管理的发行版中;
[beinan@localhost~]$su
口令:
[root@localhostbeinan]#/etc/init.d/crondrestart
停止crond:
[确定]
启动crond:
[确定]
也可以先杀死crond,再运行crond命令的办法来启动;
[root@localhostbeinan]#pkillcrond
[root@localhostbeinan]#pgrepcrond
[root@localhostbeinan]#/usr/sbin/crond
[root@localhostbeinan]#pgrepcrond
6664
3、计划任务的应用范围;
计划任务主要是让系统自动完成一些工作。
比如我们可以让系统自动在某一时刻清理或备份httpd服务器的日志,然后重新启动httpd服务器,这对网络管理员来说是很重要的。
也可以让系统自动清空位于/tmp目录的垃圾文件。
另外值得一提的是,LinuxSir.Org有很多子站,每个子站都有RSS,能让这些站点的RSS相互投递,也是用cron来完成,比如是在早上4点左右开始执行这个任务。
这是一个极为耗费资源的过程,如果不是放在在线人少的时候,基本无法完成,所以只能放在早上进行。
作为SIR的管理员,不可能每天早上4点起来点鼠标来完成这些事吧。
所以最好的办法就是通过cron来自动运行,以在服务器最清闲的时候来完成这项工作;
4、关于本文;
本文是关于计划任务的,本来想把有关计划任务的内容都写在一个文档中,由于在写文档之前没有准备好,所以只写了一个cron;本文可能会在近期调整一下,加入at等工具的用法等;
cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序。
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。
由于Cron是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/servicecrondstart//启动服务
/sbin/servicecrondstop//关闭服务
/sbin/servicecrondrestart//重启服务
/sbin/servicecrondreload//重新载入配置
1.crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务
2.cron文件语法:
分小时日月星期命令
0-590-231-311-120-6command(取值范围,0表示周日一般一行对应一个任务)
3.记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
任务调度设置文件的写法
可用crontab-e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
MinuteHourDayMonthDayofweekcommand
分钟小时天月天每星期命令
每个字段代表的含义如下:
Minute每个小时的第几分钟执行该任务
Hour每天的第几个小时执行该任务
Day每月的第几天执行该任务
Month每年的第几个月执行该任务
DayOfWeek每周的第几天执行该任务
Command指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。
对于不指定的字段,要用“*”来填补其位置。
举例如下:
5****ls指定每小时的第5分钟执行一次ls命令
305