0430cron.htm
来自「鸟哥LINUX 学习课本」· HTM 代码 · 共 652 行 · 第 1/3 页
HTM
652 行
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head> <meta http-equiv="Content-Type" content="text/html; "> <meta name="Author" content="VBird"> <meta name="GENERATOR" content="Mozilla/4.5 [zh-TW] (WinNT; I) [Netscape]"> <meta name="Description" content="包括了 crontab 與 at 這兩支程式啦!"> <title>鸟哥的 Linux 私房菜 -- 例行性命令的建立</title><!-- saved from url=(0022)http://internet.e-mail --><style> <!-- body{background-image=url(http://linux.vbird.org/VBirdLinux.jpg);background-ATTACHMENT=FIXED} --></style></head><body nosave="" background="0430cron_files/VBirdLinux.jpg"><center><center><b><font size="+2" color="#3333ff"><font face="SimSun">鸟哥的</font><font face="Times New Roman,Times"> Linux </font><font face="SimSun">与</font><font face="Times New Roman,Times"> ADSL </font><font face="SimSun">私房菜</font></font></b><br><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><hr width="100%"></center><font size="+2" color="#3333ff"><a href="http://linux.vbird.org//linux_basic/0430cron.php" target="_self"><font face="Times New Roman,Times">Linux</font><font face="SimSun">例行性命令的建立</font></a></font></center><div align="right"><font size="-1" color="#3333ff" face="SimSun">最近更新日期:2002/05/30</font></div><font size="+1" color="#000099"><a href="#Whatiscron">什么是例行性命令</a>?</font><br><font size="+1" color="#000099"><a href="#linuxcron">Linux 系统的例行性命令有哪些</a>?</font><br><font size="+1" color="#000099"><a href="#at">仅执行一次的工作排程</a>:at</font><br><font size="+1" color="#000099"><a href="#crontab">循环执行的例行性命令</a>:crontab</font><br><font size="+1" color="#000099"><a href="#etc-crontab">系统的 crontab设定</a>: /etc/crontab</font><br><font size="+1" color="#000099"><a href="#safe">安全的防护</a>:/var/log/cron 记录文件</font><br><font size="+1" color="#000099"><a href="#FAQ">本章习题练习</a></font><br><hr width="100%"><a name="Whatiscron"></a><font size="+1" color="#000099">什么是例行性命令?</font><blockquote>每个人或多或少都有一些约会或者是工作,有的工作是例行性的,例如每年一次的加薪、每个月一次的工作报告、每周一次的午餐会报、每天需要的打卡等等;有的工作则是临时发生的,例如刚好总公司有高官来访,需要你准备演讲器材等等!用在生活上面,例如每年的爱人的生日、每天的起床时间等等、还有突发性的计算机大降价(阿~我等好久了~~)等等啰。这些工作都可以称为例行性命令,而这些工作Linux 也都可以帮您提醒,例如:每一天早上 8:00 钟要服务器连接上音响,并启动音乐来唤你起床;而中午12:00 希望 Linux可以发一封信到你的邮件信箱,提醒你可以去吃午餐了;另外,在每年的你爱人的生日的前一天,先发封信提醒你,以免忘记这么重要的一天。</blockquote><blockquote>从上面的说明当中可以很清楚的发现两种工作排程的方式:<ul><li>一种是例行性的,就是每隔一定的周期要来办的事项;</li><li>一种是突发性的,就是这次做完以后就没有的那一种(计算机大降价....)</li></ul>那么在 Linux 底下如何达到这两个功能呢?呵呵!那就得使用 at 与 crontab 这两个好东西啰!<ul><li><b><font color="#000099">at</font></b> : 这个工作仅执行一次就从 Linux系统中的排程中取消;</li><li><b><font color="#000099">crontab</font></b> : 这个工作将持续例行性的作下去!</li></ul>底下我们先来谈一谈 Linux 的系统到底在做什么事情,怎么有若干多的工作排程在工作呢?然后再回来谈一谈at 与 crontab 这两个好东西!</blockquote><hr width="100%"><a name="linuxcron"></a><font size="+1" color="#000099">Linux系统的例行性命令有哪些</font><blockquote>好了,那么服务器自己有什么例行性命令要来作呀!?Linux 的工作可多着呢!由前面提到的几篇文章中,我们知道Linux本身在背景下的工作可是很多的,尤其是网络开放的情况下,建立与取消联机、MySQL数据库的实时更新、以及一些例行的系统指令,例如释放内存的工作等等。由于例行的工作非常的多,实在不可能每天都要管理员来手动输入吧!所以才会建立这个工作排程的需求的!基本预设的工作有底下这些:<ul><li><b>进行数据轮替 ( log rotate )</b>:这个步骤重要了!尤其是在 log file 的选项当中!由于登录档案会越来越大,所以需要适时适量的将登录档备份,并以新开的档案来进行记录,这样效率会比较好,因此就需要使用log rotate 啦!系统预设的重要工作之一;</li></ul><ul><li><b>rpm 数据库的建立</b>:虽然 RPM 数据库会在你以 RPM 安装之后即更新到 RPM数据库当中去,但是难保会有漏网之鱼,所以系统也会设定每隔依段时间自动的搜集系统上面的RPM数据库来建置一番;</li></ul><ul><li><b>建立 locate 的数据库</b>:是否还记得为何使用 <a href="http://linux.vbird.org//linux_basic/0220filemanager.php#locate">locate</a>这个指令时,搜寻速度超快!那是因为 Linux 系统上将档案与路径都记录在数据库里面了!所以使用locate 的时候,嘿嘿!直接指向数据库去 ( <font color="#3333ff" face="SimSun">/var/lib/slocate/slocate.db</font>) ,偏偏麻烦的是这个档案的更新是每天一次!所以当你今天更新的档案,使用locate 反而可能会找不到....</li></ul><ul><li><b>进行程序的分析</b>:每隔依段时间会进行程序的分析,如果发现有僵尸程序的时候,就会将他删去!以保持内存的工作能力!</li></ul><ul><li><b>登录档视察</b>:这个东西是在 Red Hat 7.1 以后才出现的东西,后来太好用了,所以被拿到旧版的Red Hat 里面去使用!基本上就是分析登录档啦!然后据以解析有问题的纪录文件,以维护主机的安全性!这部份不才小弟也自己写了一个简易型的分析档案,觉得更好用就是了!</li></ul><ul><li><b>指纹数据库的比对</b>:基本上就是 tripwire 这个套件啦!可以用来分析最近被更动过的档案内容!蛮不错的一个程序!有空也来玩玩看。</li></ul>Linux 预设的例行工作至少就有这些了,再加上您努力的为 Linux 进行工作排程的设计,嘿嘿!每天的工作量可是相当的大的呢!</blockquote><hr width="100%"><a name="at"></a><font size="+1" color="#000099">仅执行一次的工作排程</font><blockquote>如果仅要执行一次的工作,就使用 at 这个指令吧!这个指令其实就是atd 这个服务啦!所以请记得一定要启动这个服务呦!如果是在 Red Hat 系统下,可以使用:<ol><li><font color="#000066" face="SimSun">ntsysv</font></li><li><font color="#000066" face="SimSun">选择 atd</font></li><li><font color="#000066" face="SimSun">按下 OK !</font></li></ol>如果是在 Mandrake 系统下,可以使用:<ol><li><font color="#000066">chkconfig --add atd</font></li><li><font color="#000066">chkconfig --list</font></li><br><font color="#000066">上面这个指令可以查看 atd 在 run-level 正确的情况中,是否会在开机的时候被启动!</font></ol>基本上, atd 是预设开启的,如果您没有更动过系统默认值的话,那么上面的动作就不需要动啰!下达at 这个动作会将工作排程写入<font color="#3333ff" face="SimSun"> /var/spool/at</font>这个目录下呢!然后等待系统将之执行啰!此外,这个 at 指令虽然预设是所有人都能进行,但是可以经由root 的规范来限制使用的人口。限制的方法其实与 /etc/hosts.allow(deny) 类似,使用/etc/at.allow(deny) 这两个档案来限制:<ul><li><b>限制使用者原理</b>:当使用者执行 at 时,系统会</li><br> <ol><li>先找寻 <b>/etc/at.allow</b> 这个档案,写在这个档案中的使用者才能使用 at,没有在这个档案中的使用者则不能使用 at ( 即使没有写在 at.deny 当中 );</li><li>如果没有 /etc/at.allow 就寻找<b> /etc/at.deny</b> 这个档案,若写在这个at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用at 咯;</li><li>如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。</li></ol></ul><ul><li>Linux 预设情况下,只有 <b>/etc/at.deny</b> 这个档案,且这个档案的内容为空白的,由于内容没有任何使用者,所以当然『所有人都可以使用at 』</li></ul><ul><li>如果不想要某个使用者使用 at 时,那么将该使用者账号写到 /etc/at.deny 这个档案中即可。</li></ul>好了!我们来谈一谈 at 的语法吧!<br> <table bgcolor="#000000" border="1" cols="1" width="650"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">at [-m] TIME</font><font color="#ffffff"> </font><font color="#ff9900"> (下达工作指令)</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">atq</font><font color="#ffffff"> </font><font color="#ff9900">(查看目前的工作排程)</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">atrm [jobnumber]</font><font color="#ffffff"> </font><font color="#ff9900">(删除排程)</font></font><br><font size="-1" color="#ffffcc" face="SimSun">参数说明:</font><br><font size="-1" color="#ff9900" face="SimSun">-m   :执行 at 所规范的工作排程时,将屏幕输出结果 mail 给下达指令的使用者</font><br><font size="-1" color="#ff9900" face="SimSun">TIME :时间的格式,有底下几个:</font><br><font size="-1" color="#ff9900" face="SimSun"> HH:MMYYYY-MM-DD ex> 04:00 2002-05-30 (五月三十号四点执行)</font><br><font size="-1" color="#ff9900" face="SimSun"> HH[pm;am]+ number [hours;days;weeks] ex> 4pm + 3 days (在过 3 天的下午 4 点)</font><br><font size="-1" color="#ff9900" face="SimSun"> HH:MM ex>12:00 (今天的 12 点执行)</font><br><font size="-1" color="#ff9900" face="SimSun"> HH[pm;am][Month] [Day] ex> 1pm May 30</font><br><font size="-1" color="#ff9900" face="SimSun">jobnumber:每一个at 工作排程都有编排的顺序!这个即是!</font><br><font size="-1" color="#ffffcc" face="SimSun">范例:</font><p><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">at 5pm   </font><font color="#ff9900"><==在今天的5pm 执行,如果今天已过 5 点则明天执行;</font></font><br><font size="-1" color="#ffffff" face="SimSun">warning: commandswill be executed using (in order) a) $SHELL b) login shell c) /bin/sh</font><br><font size="-1" face="SimSun"><font color="#ffffff">at> </font><font color="#ffff00">mail-s test test < /home/test/.bashrc </font><font color="#ff9900"><==这就是我的工作!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">at> <EOT></font><font color="#ff9900"><==这里是按下[Ctrl] + D 就可以离开了!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">job 8 at 2002-05-3017:00 </font><font color="#ff9900"> <==这里会告诉你这个工作的号码为8 号,执行的日期为后面所示。</font></font></p><p><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]# </font><font color="#ffff00">atq </font><font color="#ffffff"> </font><font color="#ff9900">
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?