crontab用法详解实例_第1页
crontab用法详解实例_第2页
crontab用法详解实例_第3页
crontab用法详解实例_第4页
crontab用法详解实例_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linuxcrontab日志讲解crontab是Linux下最常用的计划任务服务。本文跟大家分享一下有关linuxcrontab日志存放的一些心得,希望本文能教会你更多东西。默认情况下,crontab中执行的日志写在/var/log下,如:#ls/var/log/cron*/var/log/cron/var/log/cron.1/var/log/cron.2/var/log/cron.3/var/log/cron.4如果日志有问题,可以参考以下做法:为crontab增加日志crontab的日志比较简单,当crond执行任务失败时会给用户发一封邮件。恰巧在我们的一台服务器上发现一个任务没有正常执行,而且crond发邮件也失败了。通过看mail的日志,看到是磁盘空间不足造成的。此外,同事帮我为crontab中的任务增加自己的日志,这样出错后,比较容易看到原因。06***$HOME/for_crontab/createTomorrowTables>>$HOME/for_crontab/mylog.log2>&1把错误输出和标准输出都输出到mylog.log中。注意:不要写成06***$HOME/for_crontab/createTomorrowTables2>&1>>$HOME/for_crontab/mylog.log否则就输出到标准输出了Linux的自动执行程序cron和crontab假如你有一些任务要定期执行,比如清理磁盘、删除过期文件、发送邮件和提醒,这个时候可以用cron来帮你。首先是安装,大多数发行版都预装了,Gentoo下的cron有许多种实现,可以用emerge—searchcron来查看,这里用vixie-cron,因为功能比较完整,命令语法也比较通用。emergevixie-cron之后要启动cron服务:/etc/init.d/vixie-cronstart别忘了把cron加入到启动脚本中:rc-updateaddvixie-crondefault完成安装。系统cron设定:/etc/crontab通过/etc/crontab文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。让我们打开/etc/crontab,看看cron的语法:#forvixiecronTOC\o"1-5"\h\z##$Header:/var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab"3.0.1-r4,v1.12005/03/0423:59:48ciaranmExp$##6.#GlobalvariablesSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/12.#checkscriptsincron.hourly,cron.daily,cron.weeklyandcron.monthly0****rootrm-f/var/spool/cron/lastrun/cron.hourly15.13***rootrm-f/var/spool/cron/lastrun/cron.daily16.154**6rootrm-f/var/spool/cron/lastrun/cron.weekly3051**rootrm-f/var/spool/cron/lastrun/cron.monthly*/10****roottest-x/usr/sbin/run-crons&&/usr/sbin/run-crons以上是一个默认的/etc/crontab文件,7〜11行设定了执行任务时特定环境变量的值,MAILTO=root指出出错信息发给root。真正描述执行的任务在14〜18行,每行代表了一个定期执行的任务,从前到后,分为3部分:第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。第二部分,上面的文件全部是"root”,描述了执行任务时的用户。第三部分,为需要执行的完整命令。第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:07***rootmpg123~/wakeup.mp3分时日月周星号,即代表不限制,上面的例子就是:每天的7点0分,都将执行mpg123~/wakeup.mp3,放首歌,把自己从睡梦中叫醒〜以下是各部分的取之范围:分钟0〜59小时0〜23日期1〜31月份1〜12周0〜6其中周的范围0〜6,0代表星期天,1〜6代表周一〜周六。让我们来看更多的例子:04**0rootemerge--sync&&emerge-uDworld#每周日凌晨4点,更新系统021**rootrm-f/tmp/*#每月1号凌晨2点,清理Imp下的文件0865*rootmailrobin</home/galeki/happy.txt#每年5月6日给robin发信祝他生日快乐假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过“/”和“,”来设置:*/2****root#每两分钟就执行.......06,12,18***root#每天6点、12点、18点执行用户的cron:crontab命令上面我们提到的/etc/crontab文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:#gpasswd-agalekicroncrontab命令主要有3个参数:-e:编辑用户的crontab。-l:列出用户的crontab的内容。-r:删除用户的crontab的内容。执行crontab-e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和/etc/crontab文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。crontabT用来查看自己的crontab文件内能,crontab-r删除自己的crontab。Crontab使用心得服务器系统:64BitCentOS5.5虽然关于Crontab的介绍到处都是,详细读了一遍这个词条,收获还是有的。Crontab这个名字来自“chronos”,一个古希腊语,“时间”的意思(以下用法在生产环境下的服务器非常有用,抚琴煮酒强烈推荐);关于crontab的基础用法和语法我就不推荐了,google和51cto上到处都是,我说的是一些进阶技巧,里面也有可能是不知道的;Shell脚本均取自于线上服务器。我安装的服务器一般都是采用最小化安装,安装以后就发现启动cron的管理服务crond默认就是启动的,servicecrondstatuscrond(pid3444)isrunning...手快的小伙可用chkconfigcrondon让其在level3和level5自动运行。cron把命令行保存在crontab(crontable)文件里,这个文件通常在/etc目录下。每个系统用户都可以有自己的crontab(在/var/spool/cron/下)。要查看当前用户的crontab,输入crontab-l要编辑crontab,输入crontab-e要删除crontab,输入crontab-r如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后加上-uUSERNAME(如crontab-e-uUSERNAME)即可。crontab文件的默认编辑器是vi,可以输入exportVISUAL='editor'更改默认编辑器。cron服务每分钟不仅要读一次/var/spool/cron目录内的所有文件,还需要读一次/etc/crontab文件。配置这个文件也能让cron执行任务。使用crontab命令是对用户级任务的配置,而编辑/etc/crontab文件是对系统级任务的配置。抚琴煮酒定义的crontab语法比较好记,推荐记忆学习分时日月星期用户带绝对路径的命令脚本或PHP详细路径细心的你发现没有,crontab最小执行时间为分钟,如果要求任务是以秒为级别的怎么办,其实是有办法的,我等会以实例说明下;服务器我建议也以/etc/crontab为主,它更方便控制用户管理;建议服务器上的计划任务时间错开,不要同时并行任务,不然会在某时间段造成系统负载过大,搞得你的Nagios狂发报警邮件。玩windows应该也会发现,windows2K系列的每修改一次系统管理员Administrator的密码就是一次浩大的工程,windows的每个计划任务scheduler都要更改密码;CentOS下修改root密码就简单多了,一条passwd命令就解决问题了,而且不影响crontab的执行。每条JOB执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条JOB命令后面进行重定向处理是非常必要的:>>/dev/null2>&1。前提是对Job中的命令需要正常输出已经作了一定的处理,比如追加到某个特定日志文件;>>/dev/null2>&1表示把所有标准输出发送到/dev/null(linux的回收站),把标准错误输出(2)发送到和标准输出(1)同样的地方(即/dev/null)。运行这行命令将不会产生任何输出。举例说明如下:30151361*roottarczf/usr/local/backups/daily/etc.tar.gz/etc>>/dev/null2>&1CentOS/FreeBSD下用crontab定时执行PHP程序的正确方法如下:在linux下,可以使用crontab+php的方法:1、使用crontab-e编辑定时任务内容为:xx:xx:xx执行一个test.php文件2、php文件必须在文件头一行,加上解释器路径(就象perl做的那样)#!/usr/local/bin/phpPHP的执行需要Apache的支持,shell脚本的执行需要Linux的支持,而Linux支持定时运行某个程序的功能。将PHP作为Shell脚本语言使用(转载)英文原著:DarrellBrogdon,发表于/columns/darrell20000319.php3)※我比较懒哈,以前的方法就是直接在/etc/crontab里直接带上php路径,如*/5****rootphptest.php也能正确执行;有兴趣的朋友可写一个hello程序测试,将其所有输出到一个文件即可测试,我做了大量测试证明其可执行性;当然你的php要保证其正确性,建议你的每一个crontab计划任务先在shell中先正确运行一次后再写进crontab里,这是保证成功的必要条件。crontab如何以秒为执行你的Linux计划任务呢,许多同事和同学都问过我这个问题。其实这个问题很简单,我以实例说明下:我以前的办公室是一台ubuntu服务器,连接ADSL作NAT带办公室的机器上网,很不幸的发现,这样ADSL爱掉线,一掉线网关gateway就没了,所以写了一个shell脚本#!/bin/bashwhile:doifroute|tail-l|grep""then&>/dev/nullelseadsl-stopadsl-startfisleep10done将程序放进后台执行。执行脚本方法nuhupshroute.sh&,注意前面要用上nohup,这样避免root用户logout时此脚本也退出生效的问题。程序的运行间隔时间是10s,很多同学不明解为什么要加一个sleep10;大家可以拿虚拟机测试下,如果没有这条sleep10的语句,你的Linux服务器会运行大量此route.sh,很快耗光你的服务器资源,你的系统负载会很快上去,Nagios马上会叫起来的~另一个就是监控负载均衡器Nginx的shell脚本,用于Nginx+Keepalived负载均衡高可用环境:#!/bin/bashwhile:donginxpid='ps-Cnginx—no-header|wcTif[$nginxpid-eq0];then/usr/local/nginx/sbin/nginxsleep5if[$nginxpid-eq0];then/etc/init.d/keepalivedstopfifisleep5done另外,这里附带说下crontab的一个妙用:我在配置一台服务器的iptables时,不小心设置了某一项错误参数,结果锁定7SSH会话,导致我们经理及另一系统管理员员连不上服务器,郁闷之余,看到此法特推荐给大家,极其有用,建议大家学习参考:可以配置一计划任务crontab,每5分钟运行一次,即*/5****root/bin/sh/root/firestop.shfirestop.sh内容为#/bin/bashserviceiptablesstop这样即使你的脚本存在错误设置(或丢失的)规则时,也不至于将你锁在计算机外而无法返回与计算机的连接,让你放心大胆的调试你的脚本。最后说明下Crontab任务的执行环境问题。尽管可以更改执行cron任务畤使用的环境,但经常最好创建一侗包装脚本,以在运行实际需要的命令前定义任何环境境变量(如PATH)。这样做的部分原因是出于安全考虑;向crontab作业开放的区域越多,越可能得到包含可疑内容的束西。另一个原因是,这样可确保即使更改了环境中的一个依赖关系,你的crontab作仍将执行。Crontab命令的语法crontab命令的用途就是:提交、编辑、列出或除去cron作业。语法crontab[-e[UserName]|-l[UserName]|-r[UserName]|-v[UserName]|File]描述crontab命令提交、编辑、列出或除去cron作业。一个cron作业是一个命令,其运行是由cron守护程序在规则的调度间隔执行的。要提交一个cron作业,指定crontab命令用-e标志。crontab命令调用一个编辑会话,允许创建一个crontab文件。在这个文件中,为每个cron创建条目。每个条目必须是一种cron守护程序可接受的格式。要得到创建条目的信息,参阅crontab文件条目格式。当创建完条目和退出文件后,crontab命令将它复制到/var/spool/cron/crontabs目录,并把它放到一个文件中,此文件的名称是当前的用户名。如果以用户名命名的文件已存在于crontabs目录中,crontab命令会覆盖它。同样的,可以通过指定文件参数创建crontab文件。如果此文件已经存在,格式必须是cron守护程序所需要的。如果文件不存在,crontab命令就调用编辑器。如果EDITOR环境变量存在,此命令就调用它指定的编辑器。否则,crontab命令调用vi编辑器。要列出crontab文件的内容,就指定crontab命令并采用T标志。要除去存在的文件,采用-r标志。可选的UserName参数可被crontab文件的所有者或者root用户来使用,为指定的用户编辑、列出、除去或验证cron作业的状态。如果UserName是无效的,就会产生错误消息并退出程序。如果可选的UserName参数没有被指定,这个crontab标志对于root用户和当前用户可用。安全性只有root用户和crontab文件的所有者可以在-e、-l、-r和-v标志后面使用UserName以编辑、列出、除去或验证指定用户的crontab文件。cron守护程序这个cron守护程序运行的命令和crontab文件条目是相对应的。如果不重新定向cron作业的输出为标准输出或标准错误,cron守护程序就会通过电子邮件告知您任何命令输出或错误。如果在crontab文件中指定了不正确的cron作业,这个cron守护程序不运行这个作业。cron守护程序只在cron守护程序被初始化时检查crontab文件。当用crontab命令改变crontab文件时,指示变化的消息被发送到cron守护程序。这消除了在规则的调度间隔检查新的或改变的文件的开销。控制使用crontab命令/var/adm/cron/cron.allow和/var/adm/cron/cron.deny文件控制哪一个用户可以使用crontab命令。root用户可以创建、编辑或删除这些文件。这些文件中的条目是用户登录名,每行一个名称。如果登录标识和多个的登录名称相关联,这个crontab命令采用第一个在/etc/passwd文件中的登录名称,而不管当前实际使用哪一个登录名称。而且,要允许用户启动cron作业,应该使用chuser命令将/etc/security/user文件中的守护程序属性设置为TRUE。以下关于cron.allow文件的一个示例:rootnickdeesarah如果cron.allow文件存在,只有在文件中出现其登录名称的用户可以使用crontab命令。root用户的登录名必须出现在cron.allow文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户,通过使用crontab命令,同时在cron.deny文件中列出用户的登录名。如果只有cron.deny文件存在,任一名称没有出现在这个文件中的用户可以使用crontab命令。如果以下一个条件成立,用户将不能使用crontab命令:cron.allow文件和cron.deny文件不存在(只允许root用户)。cron.allow文件存在,但用户的登录名并不列在其中。cron.deny文件存在,并且用户的登录名列在其中。如果cron.allow和cron.deny文件都不存在,只有被root用户授权的人可以用crontab命令提交一个作业。crontab文件条目格式一个crontab文件包含每个cron作业的条目。条目由换行字符分开。每个crontab文件条目包括6个字段,它们被空格或制表符以以下格式分开:分时日期月星期command这些字段接收以下值:分0到59时0到23日期1到31月1到12星期0到6(星期日到星期六)commandshell命令必须为每个字段指定一个值。除了command字段,这些字段可以包含以下内容:指定范围内的一个数。要在5月运行一个命令,在month字段指定5。两个被破折号分开的数目表明了包含的范围。要从星期二到星期五运行cron作业,把2-5放到weekday字段中。由逗号隔开的数字列表。要在一月第一天和最后一天的运行命令,在day_of_month字段中可指定1,31。*(星号),意味着所有的允许值。要每个小时运行一个作业,在小时字段指定一个星号。注:任一字符前如有一个反斜杠符号(包括%)会引起字符被字面上的处理。天的规范是由两个字段(月的天和星期的天)组成的。如果指定两者都为元素的一个列表,这两个字段均被包含在其中。例如,如下条目:001,15*1command将在每个月的第一天和第十五天运行command,还有每个星期一。要仅在一个字段中指定天,另一字段应包含*。指定命令这个cron守护程序运行命名于所选日期和时间的第六个字段中的字段。如果包含一个%(百分号)在第六字段,cron守护程序像命令调用一样处理所有的任务,并使所有的后续任务在标准输入上可用,除非转义百分号(\%)。空行和第一个非空字符是编号标记(切将被忽略。如果命令含有反斜杠(\)的参数,反斜杠前应加另一个反斜杠。注:shell只运行该命令字段的第一行。所有其他的行作为标准的输入对于命令可用。cron守护程序从HOME目录中启动一个子shell。如果调度一个命令运行,这时您尚未登录,并且希望在.profile文件中的命令运行,这个命令必须明确的读取您的.profile文件。cron守护程序为每个shell提供了一个缺省的环境,定义了HOME,LOGNAME,SHELL(=/usr/bin/sh)和PATH(=/usr/bin)。标志-eUserName编辑用户的crontab文件的副本,或者,如果一个有效的UserName的crontab文件不存在则创建一个空的文件进行编辑。当编辑完成后,文件被到crontab目录作为用户的crontab文件。-lUserName列出用户的crontab文件。-rUserName从crontab目录除去用户的crontab文件。-vUserName列出用户cron作业的状态。安全性审计事件:如果审计子系统已经被正确的配置和启用,crontab守护程序就会当每次执行命令时产生以下审计记录(或事件):事件信息CRON_JobRemove列出哪一个用户除去了cron作业和除去的时间。CRON_JobAdd列出哪一个用户添加了cron作业和添加的时间。有关如何正确选择和分组审计事件以及如何配置审计事件数据收集的更详细信息,请参阅《安全性》中的SettingupAuditing。退出状态该命令返回以下退出值:0成功完成。>0发生错误。示例要将名为mycronjobs的文件复制到/var/spool/cron/crontabs目录中,输入以下内容:crontabmycronjobs文件将复制为:/var/spool/cron/crontabs/<username>其中<username>是您当前的用户名。要每小时将时间写入控制台(以小时的形式),请输入:0****echoThehouris'date'.>/dev/console要在每个星期一、星期三和星期五的6:30a.m.运行calendar命令,请输入:306**1,3,5/usr/bin/calendar要在一年中每天6:30运行calendar命令,请输入:306***/usr/bin/calendar要在八月每天午夜运行名为maintenance的脚本,请输入:00*8*/u/harry/bin/maintenance为命令的标准输入定义文本,请输入:016*125/usr/sbin/wall%HAPPYHOLIDAY!%Remembertoturninyourtimecard.在%(百分号)之后定义wall命令的标准输入的文本:HAPPYHOLIDAY!Remembertoturninyourtimecard.文件/var/adm/cron/FIFO指定的管道,当用crontab或at命令提交新作业时,它将消息发送到cron守护程序。/var/spool/cron/crontabs指定crontab缓冲池区域。/var/adm/cron/cron.allow指定用户列表,这些用户被允许访问crontab命令。/var/adm/cron/cron.deny指定用户列表,这些用户不被允许访问crontab命令。计划任务工具cron的配置和说明1、计划任务概说;计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到crond服务器来完成这项工作°cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd服务器重新启动,这就是一个计划任务;下面我们先来说说cron;2、cron;在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。cron的安装和启动;在一般情况下,cron都是系统默认安装的,我们要学会查看软件包是否已经安装;2.1.1在Redhat或Fedora等RPM包管理的系统的安装;判断系统是否已经安装cron相关的包Fedora5.0系统的情况;其它版本的Fedora及Redhat的系统和这相似;[root@localhost~]#rpm-qa|grepcronvixie-cron-4.1-54.FC5anacron-2.3-36.1crontabs-1.10-7.1其中vixie-cron软件包是cron的主程序,您可以通过下面的命令来了解它,其它软件包同理;[root@localhostbeinan]#rpm-qlvixie-croncrontabs软件包是用来安装、卸装、或列举用来驱动cron守护进程的表格的程序°cron守护进程检查crontab文件来查看某个指定命令被调度执行的时间。如果命令已经调度,守护进程就会执行它们。了解crontabs软件包都安装了些什么,应该用下面的命令;[root@localhostbeinan]#rpm-qlcrontabs如果没有安装,可以从光盘中找出文件名带有cron字样的软件包来安装。[root@localhost~]#rpm-ivhvixie-cron-4.1-54.FC5*[root@localhost~]#rpm-ivhcrontabs*也可以用yum来在线安装;[root@localhost~]#yuminstallvixie-cron[root@localhost~]#yuminstallcrontabs2.1.2在Slackware系统中的安装;在Slackware中cron软件包是dcron,您可以在光盘中找出来安装它;查看是否已经安装7dcron软件包,您可以这样查看。在这里能列出软件包详细的安装情况;[root@localhost~]#more/var/adm/packages/dcron*如果没有安装,请用下面的命令来安装。在第一张安装盘中找出dcron软件包;[root@localhost~]#installpkgdcron*.tgz2.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;cron配置文件;cron是一个服务器程序,我们都知道Linux的服务器的配置,大多是通过配置文件来完成的,cron自然也不例外,在Redhat/Fedora等系统中它的全局性配置文件是/etc/crontab;在Slackware系统中,全局性文件是/var/spool/cron/crontabs/root。每个用户也有自己的cron配置文件,我们可以通过crontab-e来编辑它;2.2.1全局性配置文件;下面是一个全局性的配置文件例子,以FedoraCore5为例;[root@localhost~]#more/etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#run-parts****rootrun-parts/etc/cron.hourly#4***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类型的定义等,这些大多不用修改;我们经常添加的是计划任务或修改任务执行的时间等;在全局性配置文件中,我们发现有类似这些行;_****rootrun-parts/etc/cron.hourly注:表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本;4***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目录下的可执行程序或脚本;这些行是用来在同一时间批量执行任务的,我们在以后的例子中独立出来解说,在这里只是让大家心中有数;cron配置计划任务的书写格式分钟小时日月周[用户名]命令说明:第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中0表示星期日。每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;第七段应该定义的是:执行的命令和参数。注:其中用户名可是省略,用户名定义的是程序用哪个用户来执行,比如nysql服务器,我们可以定义成以mysql用户来启动、停止、重新启动,这时要写上用户名;不过对于cron来说意义不是太大,因为每个用户都有自己的cron配置文件。有些程序的启动必须用到root用户,这时我们就可以修改root用户的cron配置文件就行了。在每个用户的配置文件中,不必指定用户名。我们可以把计划任务写在全局性配置文件中,如果您想把一个计划放入全局性配置文件中,就得改发行版所对应的cron全局配置文件,比如Fedora5的全局性配置文件是/etc/crontab文件;每个用户也能定义自己的cron配置文件,用crontab-e命令来定义;举一例:让机器在每天8点30分重新启动;关于时间格式中有7个字段。我们可以直接更改或者添加,当然这是系统任务调用。举个例子,比如我在每天的早上8点30分重新启动机器,就可以在/etc/crontab中加入下面的两句,第一句就是注释了。以#号开始,后面写一个自己能知道这是什么任务的备注;#rebootOS308***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/crondT10>>/var/log/cron2>&1</cdoe><b>如果想让立即让cron重启生效,也可以用下面的办法;</b><code>[root@localhost~]#pgrepcrond注:查看crond服务器是否运行;2022[root@localhost~]#pkillcrond注:杀死crond;[root@localhost~]#pgrepcrond注:查看crond是否退出;[root@localhost~]#/usr/sbin/crond注:启动crond;[root@localhost~]#pgrepcrond注:查看crond是否已经运行得起来了;38832.2.3关于同一时间,同时执行多个任务的定义方法;我们在前面已经说过,在全局性配置文件中,有类似如下的段落;_****rootrun-parts/etc/cron.hourly注:表示每个小时的第一分钟,开始执行/etc/hourly目录下的可执行程序或脚本;4***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</cdoe>然后我们到/etc/crond.daily目录中创建两个文件,一个是用来重启httpd服务器的,如下;<code>[************************]#touchhttpd.sh[************************]#chmod755httpd.sh[************************]#echo〃/etc/init.d/httpdrestart〃〉httpd.sh[************************]#morehttpd.sh/etc/init.d/httpdrestart如果我想在每天5点20分下载FC5的镜像,可以再创建一个文件fc5down.sh[************************]#touchfc5down.sh[************************]#chmod755fc5down.sh[************************]#echo"/usr/bin/wget/fedora/core/5/i386/iso/FC-5-i386-DVD.iso〃>fc5down.sh[************************]#morefc5down.sh/usr/bin/wget/fedora/core/5/i386/iso/FC-5-i386-DVD.iso然后我们重新启动一下crond就行了;[************************]#pkillcrond[************************]#prepcrond[************************]#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-lcrontab-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/fedora/core/5/i386/iso/FC-5-i386-DVD.iso保存退出后,我们用下面的命令来查看beinan用户的计划任务;[beinan@localhost~]$crontab-l4020***/usr/bin/wget/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]#pgrepcrond66643、计划任务的应用范围;计划任务主要是让系统自动完成一些工作。比如我们可以让系统自动在某一时刻清理或备份httpd服务器的日志,然后重新启动httpd服务器,这对网络管理员来说是很重要的。也可以让系统自动清空位于/tmp目录的垃圾文件。另外值得一提的是,LinuxSir.Org有很多子站,每个子站都有RSS,能让这些站点的RSS相互投递,也是用cron来完成,比如是在早上4点左右开始执行这个任务。这是一个极为耗费资源的过程,如果不是放在在线人少的时候,基本无法完成,所以只能放在早上进行。作为SIR的管理员,不可能每天早上4点起来点鼠标来完成这些事吧。所以最好的办法就是通过cron来自动运行,以在服务器最清闲的时候来完成这项工作;4、关于本文;本文是关于计划任务的,本来想把有关计划任务的内容都写在一个文档中,由于在写文档之前没有准备好,所以只写了一个cron;本文可能会在近期调整一下,加Aat等工具的用法等;5、后记;这篇后记不用写了,我在本文档修改期间写了进程管理的文档;有一件趣事得提一提,昨天查看的google广告收入,目前大约是70$左右,这个广告帐户,目前我是代luma兄管理的。现在看来广告是比较少。。。。。从一月份到现在,半年快过去了,才仅仅70$。6、参考文档;7、相关文档;利用crontab系统每天定时备份MySQL数据库利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。1、创建保存备份文件的路径/mysqldata#mkdir/mysqldata2、创建/usr/sbin/bakmysql文件#vi/usr/sbin/bakmysql输入rq='date+%Y%m%d'tarzcvf/mysqldata/mysql$rq.tar.gz/var/lib/mysql或者写成rq='date+%Y%m%d'mysqldump—all-databases-uroot-p980405>/mysqldata/mysql$rq.tar.gz/var/lib/mysql是你数据库文件的目录,部分用户是/usr/local/mysql/data,每个人可能不同/mysqldata/表示保存备份文件的目录,这个每个人也可以根据自己的要求来做。3、修改文件属性,使其可执行chmod+x/usr/sbin/bakmysql4、修改/etc/crontab#vi/etc/crontab在下面添加013***root/usr/sbin/bakmysql表示每天3点钟执行备份5、重新启动crond/etc/rc.d/init.d/crondrestart完成。这样每天你在/mysqldata可以看到这样的文件mysql20040619.tar.gz你直接下载就可以了。在tar命令执行前,停止数据库服务进程或锁定数据库,否则恢复数据时,会出现数据库损坏的情形,运气好时可修复,运气不好时就不可以了。执行DB2sql,普通用户可利用crontab定时完成此文章主要向大家讲述的是用户利用crontab定时执行DB2sql的示例,今天在RHEL5.3测试了一下,普通用户利用crontab定时执行DB2sql实际操作情况,走了一些弯路,因为用./可以执行得到正确结果。而crontab却执行得不到,很是郁闷,在网上查了半天,有好多说是/usr/bin/crontab的权限问题可是我在RHEL5.3查看并一下-rwsr-sr-x1rootroot309K2007-06-22/usr/bin/crontab我的权限是没有问题,后来查了很多资料才知道是DB2环境变量的问题,主要是水平不够,意识不高,写下备用以db2inst1用户登陆linux系统1.vidb2inst1cron*****/home/db2inst1/tongji.sh>>/home/db2inst1/b.txt2.crontabdb2inst1cron3.vitongji.sh(777)#!/bin/bash#tongjiautotop=〃20〃qiantian=$top'date-d'2dayago,+〃%y%m%d〃'yesterday=$top'date-d'1dayago'+〃%y%m%d〃、TOC\o"1-5"\h\zecho""echo$(date+"%y-%m-%d%H:%M:%S")echo"setp1:date"echo"qiantian:"$qiantianecho"yesterday:"$yesterdayecho"setp2:char"#sed-i"s/$qiantian/$yesterday/g"'grep$qiantian-rl/home/db2inst1/tongji_sec'echo"step3:dbconnect"db2"connecttotoolsdb"echo"1232312312"db2-tf/home/db2inst1/tongji_sec/sql_sec.sql4.visql_sec.sqlinsertintoliuchaovalues(10);a.[db2inst1@localhost~]$./tongji.sh(正确,是想要结果)10-03-0915:37:27setp1:dateqiantian:20100307yesterday:20100308setp2:charstep3:dbconnectDatabaseConnectionInformationDatabaseserver=DB2/LINUXX86649.5.3SQLauthorizationID=DB2INST1Localdatabasealias=TOOLSDB1232312312DB20000ITheSQLcommandcompletedsuccessfully.[db2inst1@localhost~]$38.b.crontab执行(错误,无数据库操作,不是想要结果)10-03-0915:38:01setp1:dateqiantian:20100307yesterday:20100308setp2:charstep3:dbconnect1232312312解决方法#!/bin/bash#tongjiauto./home/db2inst1/sqllib/db2profile#引入db2的环境变量(.后面有空格)top="20"以上的相关内容就是对普通用户利用crontab定时执行DB2sql示例的介绍,望你能有所收获。anacron工具详解anacron是和cron相似的任务调度器,只不过它并不要求系统持续运行,它可以用来运行通常由cron运行的每日、每周、和每月的作业;要使用anacron服务,你必须安装了anacron软件包,anacron服务必须在运行;要判定该服务是否在运行,使用/sbin/serviceanacronstatus命令1、配置anacronAnacron与cron一样用来调度重复的任务,周期性安排作业;任务被列在配置文件/etc/anacrontab中。文件中的每一行都代表一项任务,格式是:格式:perioddelayjob-identifiercommand0period—命令执行的频率(天数)0delay—延迟时间(分钟)0job-identifier—任务的描述,用在anacron的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(除斜线外)。0command—要执行的命令对于每项任务,anacron先判定该任务是否已在配置文件的period字段中指定的期间内被执行了。如果它在给定期间内还没有被执行,anacron会等待delay字段中指定的分钟数,然后执行command字段中指定的命令;任务完成后,anacron在/var/spool/anacron目录内的时间戳文件中记录日期;这里只记录日期,无具体时间,而且job-identifier的数值被用做时间控制文件的名称。Anacron与cron配置文件相似,SHELL和PATH之类的环境变量可以在/etc/anacrontab文件的前部定义;现在从配置文件入手来分析anacron:/etc/anacrontab:configurationfileforanacronSeeanacron(8)andanacrontab(5)fordetails.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin165cron.dailyrun-parts/etc/cron.daily770cron.weeklyrun-parts/etc/cron.weekly3075cron.monthlyrun-parts/etc/cron.monthly1,2行注释告诉用户文件是做什么用的,从man5anacrontab获取配置文件帮助。3,4行是定义用户基本环境变量,保证程序可以正常运行。6,7行是默认配置下所执行的任务,也是最重要的任务配置部分。格式为:perioddelayjob-identifiercommand格式分为四部分:执行频率(天数),延迟时间(分钟),任务描述,需要执行的命令。第一部分是指执行的周期天数,即任务多少天执行一次,monthly就是一个月(30天)内执行,weekly即是一周内执行一次。第二部分是指命令执行的重试时间,分为两种:第三部分job-identifier:anacron每次启动时都会在/var/spool/anacron中建立一个以job-identifier为文件名的文件,记录指定的任务完成时间,如果任务是第一次运行,则该文件是空的,这里只要注意不要用不能作为文件名的字符串即可,另外文件名不要太长。/sbin/serviceanacronstart启动该服务/sbin/serviceanacronstop停止该服务Shell脚本分享【51CTO独家特稿】作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来完成工作呢?其实相对于PHP这些开发语言而言,shell主要用于数据库备份(SVN备份)、计划任务(crontab)、服务状态监控、FTP远程备份等。对于这些任务,shell的强大是大家都公认的,这也是每一个Linux/unix系统管理员的基本之一。现在在Windows2008里也出现了PowerShell的身影,十分不错。下面我会用我的线上服务器的shell脚本举例来让大家了解shell及其用途。【目录】MySQL的热备份脚本用FTP同步服务器Keepalived的监控切换脚本SVN的版本库的批量备份自动监控ADSL并重拔号Linux批量生成生成帐户(10月11日更新)测试局域网内主机是否alive(10月11日更新一、MySQL的热备份脚本这是MySQL的备份方式之一,脚本如下:#!/bin/bashPATH=/usr/local/sbin:/usr/bin:/binTheDirectoryofBackupBACKDIR=/usr/mysql_backupThePasswordofMySQLROOTPASS=passwordRemaketheDirectoryofBackuprm-rf$BACKDIRmkdir-p$BACKDIRGettheNameofDatabaseDBLIST='ls-p/var/lib/mysql|grep/|tr-d/'#偷瞄了下我同事写脚本的方式,发现他直接将DBLIST一个个手动敲上去了#数据库少的情况是可以的,如果数据库是成百以上呢,呵呵BackupwithDatabasefordbnamein$DBLISTdomysqlhotcopy$dbname-uroot-p$ROOTPASS$BACKDIR|logger-tmysqlhotcopydone许多系统管理员喜欢用mysqldump--opt来备份数据库,由于比较简单,我这里就不重复了。二、用FTP同步服务器许多系统管理员喜欢用rsync同步二台服务器之间的数据,但我们更喜欢用FTP来实现,其好处是:FTP比rsync更能耗尽带宽,所以它更适合同步数据库(尤其是几百G的数据)配置起来相当方便,尤其是用pureftpdrsync的优势是可以快速海量同步小文件,比如二级目录或三级目录下的批量图片等基本上FTP和rsync同步各有优势,看系统管理员的取舍了。以下是本部分要介绍的FTP同步的shell脚本方式:FTPOLDDATE='date+%Y-%m-%d-d'-60days'、#在FTP定义60天间的日期变量,是为了在FTP端保存60天的数据,逾期删除。HOST=99FTP_USERNAME=dbFTP_PASSWORD=passwordcd${BACKDIR}/${DATE}ftp-i-n-v<<!open${HOST}user${FTP_USERNAME}${FTP_PASSWORD}bincd${FTPOLDDATE}mdelete*cd..rmdir${FTPOLDDATE}mkdir${DATE}cd${DATE}mput*bye!三、Keepalived的监控切换脚本实现功能如下:针对Nginx+Keepalived,编写nginx监控脚本nginx_pid.sh,放置在后台一直监控nginx进程;如进程消失,尝试重启nginx,如是失败则立即停掉本机的keepalived服务,让另一台负载均衡器接手。此脚本详细内容如下:#!/bin/bashwhile:donginxpid='ps-Cnginx--no-header|wc-l'if[$nginxpid-eq0];thenulimit-SHn65535#在并发数很大的情况下,连接数过小会导致linux狂报错,所以直接在nginx启动前定义/usr/local/nginx/sbin/nginxsleep5if[$nginxpid-eq0];then/etc/init.d/keepalivedstopfifisleep5done相关说明可参考我发在组网频道的《企业级WEB的负载均衡高可用之LVS+Keepalived》一文。四、SVN的版本库的批量备份实现其功能蛮简单,主要是用了svnadminhotcopy,这东东功能很强大,我经常用于svn的版本库的转移(顺便说一句,上次不小心误操作将库删光了,很轻松的用svnadminhotcopy将其恢复过来了)。forPROJECTintestprojectsvntestdocd${SVNDIR}${SVNADMIN}hotcopy${PROJECT}${BACKDIR}/${DATE}/${PROJECT}--clean-logscd${BACKDIR}/${DATE}tarzcvf${PROJECT}_svn_${DATE}.tar.gz${PROJECT}>/dev/nullrm-rf${PROJECT}echo"Repository:${PROJECT}backupdoneinto${BACKDIR}/${DATE}/Successful!>>${LogFile}/bin/sleep2done五、自动监控ADSL并重拔号的shell脚本公司办公室的adsl爱掉线,一掉的话网关的gateway就没了。因此编写了下列脚本:#!/bin/bashwhile:doifroute|tail-l|grep""then&>/dev/nullelseadsl-stopadsl-startfisleep10done执行脚本方法:nuhupshroute.sh&注意前面要用上nohup,这样避免root用户logout时此脚本也退出生效的问题。六、Linux批量生成生成帐户脚本此脚本应用于生产环境下生成帐户,也可生成成百上千个密码相同的帐户。脚本代码如下:#!/bin/bashfornameintomjerryjoejanedouseradd$nameechoredhat|passwd--stdin$namedone自己使用的时候,用自己需要的帐户名列表替换掉这个代码范例里的tomjerryjoejane等字段即可。密码都是redhat,可以让用户之后自己更改。七、测试局域网内主机是否alive的小脚本此脚本用于检查00到00之间的主机是否alive。脚本如下:#!/bin/bash#Checkstoseeifhosts00-00arealivefornin{100..200};dohost=192.168.1.$nping-c2$host&>/dev/nullif[$?=0];thenecho"$hostisUP”elseecho”$hostisDOWN"fidone※温馨小提示:注意$?与=之间必须空格。小结其它一些自动监控MySQL状态等脚本我感觉比较简单,适

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论