0430cron.htm
来自「鸟哥LINUX 学习课本」· HTM 代码 · 共 652 行 · 第 1/3 页
HTM
652 行
<blockquote>基本上, cron 这个服务的最低侦测限制是『分钟』,所以『<b> cron会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容</b>』,因此,只要你编辑完/etc/crontab 这个档案,并且将他储存之后,呵呵!那么 crontab 的设定就自动的会来执行了!<blockquote><font color="#000066"><b>注意</b>:在 Linux 底下的 crontab会自动的帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项,但是某些原因或者是其它的Unix 系统中,由于 crontab 是读到内存当中的,所以在你修改完 /etc/crontab之后,可能并不会马上执行,这个时候请重新启动 crond 这个服务吧!</font><blockquote><b><font color="#000066" face="SimSun">/etc/rc.d/init.d/crondrestart</font></b></blockquote></blockquote>好了,我们来看看 /etc/crontab 这的档案的内容吧:<br> <table bgcolor="#000000" border="1" cols="1" width="600"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]# </font><font color="#ffff00">vi /etc/crontab</font></font><br><font size="-1" color="#ffffff" face="SimSun">SHELL=/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun">PATH=/sbin:/bin:/usr/sbin:/usr/bin</font><br><font size="-1" color="#ffffff" face="SimSun">MAILTO=root</font><br><font size="-1" color="#ffffff" face="SimSun">HOME=/</font><p><font size="-1" color="#ffffff" face="SimSun"># run-parts</font><br><font size="-1" face="SimSun"><font color="#ffffff">01  ** * * root    run-parts /etc/cron.hourly </font><font color="#ffff00"> </font><font color="#ff9900"><==每小时执行的工作</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">02  4* * * root    run-parts /etc/cron.daily   </font><font color="#ff9900"><==每天执行的工作</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">22  4* * 0 root    run-parts /etc/cron.weekly  </font><font color="#ff9900"><==每星期执行的工作</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">42  41 * * root    run-parts /etc/cron.monthly </font><font color="#ff9900"><==每个月执行的工作</font></font><br><font size="-1" color="#ffff00" face="SimSun">分 时日月周使用者    参数     指令</font></p></td></tr></tbody></table>看到这个档案的内容你大概就了解了吧!呵呵,没错!这个档案与将刚刚我们下达crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同:</blockquote><ul><ul><li><b><font color="#3333ff">MAILTO=root</font></b>:是说,当 /etc/crontab这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?由于root 并无法在客户端中收信,因此,我通常都将这个 e-mail 改成自己的账号,好让我随时了解系统的状况!</li></ul></ul><ul><ul><li><b><font color="#3333ff" face="SimSun">01 * * * * root run-parts/etc/cron.hourly</font></b>:在批注符号 <font face="SimSun">#run-parts</font>这一行以后的命令,我们可以发现,五个数字后面接的是 root 喔!没错,这一行代表的是『<font color="#3333ff">执行的层级为root 身份</font>』当然啰,你也可以将这一行改写成其它的身份哩!而 <font color="#3333ff">run-parts</font>代表后面接的 /etc/cron.hourly 是『<font color="#3333ff">一个目录内(/etc/cron.hourly)的所有可执行档</font>』,这也就是说,<font color="#000099">每</font><font color="#3333ff">个小时的01 分,系统会以 root 层级的使用者去 /etc/cron.hourly 这个目录下执行所有可以执行的档案</font>!后面的三行也都是类似的意思!你可以到/etc/ 底下去看看,系统本来就预设了这四个目录了!你可以将每天需要执行的命令直接写到/etc/cron.daily 即可,还不需要使用到 crontab -e 的程序呢!方便吧!</li></ul></ul><ul><ul><ul>注意:基本上 /etc/crontab 里头支持两种下达指令的方式,一种是直接以指令型态 下达,一种则是以『目录规划』来下达;</ul></ul></ul><ul><ul><ul><ul><li><font face="SimSun"><b>指令型态</b>:</font></li><br><font face="SimSun">01 * * * * test mail -s test test < /home/test/test.txt</font><br><font face="SimSun">使用者是 test, 且在每个小时执行一次指令 mail ...</font></ul></ul></ul></ul><ul><ul><ul><ul><li><font face="SimSun"><b>目录规划</b>:</font></li><br><font face="SimSun">*/5 * * * * root run-parts /root/runcron</font><br><font face="SimSun">建立一个 /root/runcron 的目录,将要每隔五分钟执行的『可执行档』都写到该目录下,就可以让系统每五分钟执行一次该目录下的所有可执行档。</font></ul></ul></ul></ul><ul>这样就可以晓得 run-parts 的用意了吧!此外,与 crontab -e 规划当中最不相同的就是多了一个『使用者层级』的概念,通常我们都是以root 的角度来规划例行性命令,但是总有不需要 root 的指令吧!就可以使用这个层级来规范该程序的使用者属于谁啰!</ul><ul>好!你现在大概了解了这一个咚咚吧!OK!假设你现在要作一个目录,让系统可以每2 分钟去执行这个目录下的所有可以执行的档案,你可以写下如下的这一行在 /etc/crontab中:</ul><ul><ul><font color="#3333ff" face="SimSun">*/2 * * * * root run-parts/etc/cron.min</font></ul></ul><ul>当然啰, /etc/cron.min 这个目录是需要存在的喔!那如果我需要执行的是一个『程序』而已,不需要用到一个目录呢?该如何是好?例如在侦测网络流量时,我们希望每五分钟侦测分析一次,可以这样写:</ul><ul><ul><font color="#3333ff" face="SimSun">*/5 * * * * root /usr/local/mrtg-2/bin/mrtg/usr/local/apache/htdocs/mrtg/net/mrtg.cfg</font></ul></ul><ul>没有了 run-parts 就是代表『一个档案』的意思啦!</ul><ul>如何!?建立例行性命令很简单吧!如果你是系统管理员的话,直接修改 /etc/crontab这个档案即可喔!又便利,又方便管理呢!</ul><hr width="100%"><a name="safe"></a><font size="+1" color="#000099">安全的防护</font><ul><li><b><font color="#000099">资源分配不均</font></b>:</li><br>当大量使用 crontab 的时候,总是会有问题发生的,最严重的问题就是『系统资源分配不均』的问题,以我的系统为例,VBird 有侦测流量的信息,包括:</ul><ul><ul><li>流量</li><li>区域内其它 PC 的流量侦测</li><li>CPU 使用率</li><li>RAM 使用率</li><li>在线人数实时侦测</li></ul></ul><ul>如果每个流程都在同一个时间启动的话,呵呵!那么在某个时段时,我的系统会变的相当的繁忙,所以,这个时候就必须要分别设定啦!我可以这样做:<br> <table bgcolor="#000000" border="1" cols="1" width="600"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root@test/root]# </font><font color="#ffff00">vi /etc/crontab</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">1,6,11,16,21,26,31,36,41,46,51,56* * * * root ........  </font><font color="#ff9900"><==那个 ..代表你的指令</font></font><br><font size="-1" color="#ffffff" face="SimSun">2,7,12,17,22,27,32,37,42,47,52,57* * * * root ........</font><br><font size="-1" color="#ffffff" face="SimSun">3,8,13,18,23,28,33,38,43,48,53,58* * * * root ........</font><br><font size="-1" color="#ffffff" face="SimSun">4,9,14,19,24,29,34,39,44,49,54,59* * * * root ........</font></td></tr></tbody></table>看到了没?那个『 , 』分隔的时候,请注意,不要有空格符!(连续的意思)如此一来,则可以将每五分钟工作的流程分别在不同的时刻来工作!则可以让系统的执行较为顺畅呦!</ul><ul><li><b><font color="#000099">取消不要的输出项目</font></b>:</li><br>另外一个困扰发生在『<b>当有执行成果或者是执行的项目中有输出的数据时,该数据将会mail 给 MAILTO 设定的账号</b>』,好啦,那么当有一个排程一直出错(例如 DNS的侦测系统当中,若 DNS 上层主机挂掉,那么你就会一直收到错误讯息!)怎么办?呵呵!还记得<a href="http://linux.vbird.org//linux_basic/0340bashshell-scripts.php">BASH与 Shell scripts </a>那一章吧!?直接以『命令重导向』将输出的结果输出到<b><font face="SimSun">/dev/null</font></b>这个垃圾桶当中就好了!</ul><ul><li><b><font color="#000099">安全的检验</font></b>:</li><br>很多时候被植入木马都是以例行命令的方式植入的,所以可以藉由检查 /var/log/cron的内容来视察是否有『非您设定的 cron 被执行了?』这个时候就需要小心一点啰!</ul><hr width="100%"><a name="FAQ"></a><font size="+1" color="#000099">本章习题练习( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)</font><ul><li>今天假设我有一个指令程序,名称为: ping.sh 这个档名!我想要让系统每三分钟执行这个档案一次,但是偏偏这个档案会有很多的讯息显示出来,所以我的root 账号每天都会收到差不多四百多封的信件,光是收信就差不多快要疯掉了!那么请问应该怎么设定比较好呢?</li><br>答:<ul><font color="#ffffff" face="SimSun">这个涉及命令重导向的问题,我们可以将他导入档案或者直接丢弃!如果该讯息不重要的话,那么就予以丢弃,如果讯息很重要的话,才将他保留下来!假设今天这个命令不重要,所以将他丢弃掉!因此,可以这样写:</font><br><font color="#ffffff" face="SimSun">*/5 * * * * root /usr/local/ping.sh> /dev/null 2>&1</font></ul></ul><hr width="100%"><font size="-1" color="#000066" face="SimSun">2002/05/30:第一次完成</font><br><font size="-1" color="#000066" face="SimSun">2003/02/10:重新编排与加入FAQ</font><br><hr width="100%"><font size="-1" color="#3333ff" face="SimSun">2002/05/30以来统计人数</font><br><img src="0430cron_files/Count.gif" nosave="" align="middle" height="15" width="60"><hr width="100%"><center><a href="http://linux.vbird.org/" target="_top"><img src="0430cron_files/VBirdTitle2.jpg" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_basic"><img src="0430cron_files/icon_system.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_server"><img src="0430cron_files/icon_server.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_security"><img src="0430cron_files/icon_security.jpg" nosave="" border="0" height="25" width="90"></a><a href="http://phorum.vbird.org/" target="_blank"><img src="0430cron_files/icon_forums.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/adsl"><img src="0430cron_files/icon_adsl.gif" nosave="" border="0" height="25" width="90"></a><br><font size="-1" color="#000066">Designed by <a href="mailto:vbird@tsai.adsldns.org">VBird</a>during 2001-2004.  Aerosol Lab.</font></center></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?