⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0430cron.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 4 页
字号:
		<li><span class=text_import1>at</span> ∶ 这个工作仅执行一次就从 Linux 系统中的排程中取消;</li>
		<li><span class=text_import1>cron</span> ∶ 这个工作将持续例行性的作下去!</li></ul>

		底下我们先来谈一谈 Linux 的系统到底在做什么事情,怎么有若干多的工作排程在工作呢?然后再回来谈一谈
		at 与 crontab 这两个好东西!<br><br>
	</div>

	<hr><a name=whatiscron_linux></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>系统上常见的例行性命令有哪些?
	</span><br>
	<div class=block2>
		好了,那么伺服器自己有什么例行性命令要来作呀!?Linux 的工作可多著呢!
		由前面提到的几篇文章中,我们知道 Linux 本身在背景下的工作可是很多的,
		尤其是开放网路连线的情况下,建立与取消连线、MySQL
		资料库的即时更新、以及一些例行的系统指令,例如释放记忆体的工作等等。
		由于例行的工作非常的多,实在不可能每天都要管理员来手动输入吧!
		所以才会建立这个工作排程的需求的!基本预设的工作有底下这些∶<ul>

		<li><span class=text_import2>进行登录档的资料轮替 ( log rotate )</span>∶<br>
			这个步骤重要了!尤其是在 log file 的选项当中!由于登录档案会越来越大,
			所以需要适时适量的将登录档备份,并以新开的档案来进行记录,这样效率会比较好,因此就需要使用
			log rotate 啦!系统预设的重要工作之一;</li><br>

		<li><span class=text_import2>rpm 资料库的建立</span>∶<br>
			虽然 RPM 资料库会在你以 RPM 安装之后即更新到 RPM
			资料库当中去,但是难保会有漏网之鱼,所以系统也会设定每隔依段时间自动的搜集系统上面的
			RPM 资料库来建置一番;</li><br>

		<li><span class=text_import2>建立 locate 的资料库</span>∶<br>
			是否还记得为何使用 <a href="0220filemanager.php#locate">locate</a>
			这个指令时,搜寻速度超快!那是因为 Linux 系统上将档案与路径都记录在资料库里面了!所以使用
			locate 的时候,嘿嘿!直接指向资料库去 
			( <span class=text_import2><font face="细明体">/var/lib/slocate/slocate.db</font></span>
			) ,偏偏麻烦的是这个档案的更新是每天一次!所以当你今天更新的档案,使用
			locate 反而可能会找不到....</li><br>

		<li><span class=text_import2>进行程序的分析</span>∶<br>
			每隔依段时间会进行程序的分析,如果发现有僵尸程序的时候,就会将他删去!
			以保持记忆体的工作能力!</li><br>

		<li><span class=text_import2>登录档视察</span>∶<br>
			这个东西是在 Red Hat 7.1 以后才出现的东西,后来太好用了,所以被拿到旧版的
			Red Hat 里面去使用!基本上就是分析登录档啦!然后据以解析有问题的纪录档,
			以维护主机的安全性!这部份不才小弟也自己写了一个简易型的分析档案,觉得更好用就是了!</li><br>

		<li><span class=text_import2>指纹资料库的比对</span>∶<br>
			基本上就是 tripwire 这个套件啦!可以用来分析最近被更动过的档案内容!
			蛮不错的一个程式!有空也来玩玩看。</li></ul>

		Linux 预设的例行工作至少就有这些了,再加上您努力的为 Linux 进行工作排程的设计,
		嘿嘿!每天的工作量可是相当的大的呢!
	</div>
</div>


<hr><a NAME=atjob></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">仅进行一次的工作排程∶ at</span><br>
<div class=block1>
	好了,如同上面提到的,工作排程有所谓的例行性的,也有单一执行一次的,我们先来谈一谈仅执行一次的工作。
	要使用这种工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩意儿。
	可惜的是,目前挺多新的 Linux distributions 似乎预设不把他打开了,所以呢,我们必须要先手动将他启用才行。
	启用的方法很简单,就是这样∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>/etc/init.d/atd restart</span>
Stopping atd:                          [FAILED]
Starting atd:                          [  OK  ]

<span class=term_hd># 再设定一下开机时就启动!</span>
[root@linux ~]# <span class=term_command>chkconfig --level 35 atd on</span>
</pre></td></tr></table>

	看到那个『 OK 』的字样就好棉~关于服务的启动,我们会在后续再加以介绍,如果您真的有兴趣,
	那么可以自行到 /etc/init.d/atd 这个 shell script 内去瞧一瞧先! ^_^。
	至于那个 chkconfig ,呵呵!您也可以使用 man 先查阅一下啊!我们未来再介绍啦!<br><br>

	<hr><li><span class=text_import1>at 的工作</span></li>
	<div class=block2>
		既然是工作排程,那么自然要有写入工作的纪录档棉!没错啦!
		<span class=text_import2>我们可以使用 at 这个指令来帮忙写入工作纪录档,工作纪录档预设的放置目录在
		/var/spool/at 底下,在写入 at 记录档后,该工作便进入排程当中并等待执行。</span>
		当然啦,要让 /var/spool/at 目录底下的工作被实际运作,必须要启动我们上面提到的 atd 那个服务啦!<br><br>

		不过,并不是所有的人都可以进行 at 工作排程喔!为什么?因为安全的理由啊~
		很多主机被所谓的绑架后,最常发现的就是他们的系统当中有很多的怪客程式 (cracker program)
		被写入例行性命令的排程当中了,所以,那些可恶的程式就可能定时或不定时的在你的系统当中工作,
		呵呵!所以棉,除非是您认可的帐号,否则先不要让他们使用 at 吧!
		此外,我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个档案来进行 at 的使用限制呢!
		加上这两个档案后, at 的工作情况其实是这样的∶<ol><span class=text_import2>
		<li>先找寻 <b>/etc/at.allow</b> 这个档案,写在这个档案中的使用者才能使用 at
		,没有在这个档案中的使用者则不能使用 at ( 即使没有写在 at.deny 当中&nbsp;);</li>
		<li>如果没有 /etc/at.allow 就寻找<b> /etc/at.deny</b> 这个档案,若写在这个
		at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用
		at 咯;</li>
		<li>如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。</li>
		</ol></span>

		上面的情况说明了,其实我们只要有 at.deny 这个档案存在就好了,因为我们假设系统内的帐号都是懂得操作的使用者,
		因此,预设让他们可以任意使用 at 这个好用的东西!这也是系统的预设值。我们的 FC4 
		预设也是只有 /etc/at.deny 存在,而且该档案内并未有任何帐号资料!这表示任何人均可使用 at
		啦!不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可!
		一个帐号写一行。<br><br>
	</div>

	<hr><li><span class=text_import1>开始使用 at 棉∶</span></li>
	<div class=block2>
		好了,让我们来谈一谈 at 这个玩意儿的语法吧!<br>

<a name=at></a><table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>at [-m] TIME</span>
<span class=term_say>参数∶
-m  ∶当 at 的工作完成后,以 email 的方式通知使用者该工作已完成。
TIME∶时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有∶
  HH:MM				ex> 04:00
	在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
  HH:MM YYYY-MM-DD		ex> 04:00 2005-12-03
	强制规定在某年某月的某一天的特殊时刻进行该工作!
  HH:MM[am|pm] [Month] [Date]	ex> 04pm December 3
	也是一样,强制在某年某月某日的某时刻进行!
  HH:MM[am|pm] + number [minutes|hours|days|weeks]
	ex> now + 5 minutes	ex> 04pm + 3 days
	就是说,在某个时间点『再加几个时间后』才进行。
范例∶</span>

<span class=term_hd>范例一∶再过五分钟后,将 /root/.bashrc 寄给 dmtsai 这个使用者</span>
[root@linux ~]# <span class=term_command>at now + 5 minutes</span>
at> <span class=term_write>/bin/mail dmtsai -s "testing at job" &lt; /root/.bashrc</span>
at> &lt;EOT>   <span class=term_note>&lt;==这里输入 [ctrl] + d 就会出现 &lt;EOF> 的字样!代表结束!</span>
job 8 at 2005-09-07 10:47
<span class=term_say># 上面这行资讯在说明,第 8 个 at 工作将在 2005/09/07 的 10:47 进行!</span>

<span class=term_hd>范例二∶由于机房预计于 2005/09/16 停电,我想要在 2005/09/15 23:00 关机?</span>
[root@linux ~]# <span class=term_command>at 23:00 2005-09-15</span>
at> <span class=term_write>/bin/sync</span>
at> <span class=term_write>/bin/sync</span>
at> <span class=term_write>/sbin/shutdown -h now</span>
at> &lt;EOT>
job 10 at 2005-09-15 23:00
<span class=term_say># 您瞧瞧! at 还可以在一个工作内输入多个指令呢!不错吧!</span>
</pre></td></tr></table>

		事实上,当我们使用 at 时,at 会给使用者一个 bash shell 让使用者下达工作指令,
		此时,建议你最好使用绝对路径来下达你的指令,比较不会有问题喔!那我们知道每个指令都可能会有
		standard output/standard error 啊,这些可能会输出到萤幕上面的资讯会跑去哪里?
		呵呵!这些本来应该在萤幕上面出现的资讯通通会以 email 的方式传送到使用者的 mailbox 里面去!
		而预设如果没有 stdout/stderr 时,就不会有任何讯息传送给使用者了。但你可以使用 at -m 
		这个参数来强制 at 传送一个执行完毕的 email 讯息给你自己喔! ^_^<br><br>

		另外一个 at 的执行优点是什么呢?那就是『背景执行』的功能了!什么是背景执行啊?!
		很难了解吗?没关系,鸟哥提我自己的几个例子来给您听听,您就了了!<ul>

		<li>由于很多时候,我们其实都是使用 network 连接到主机来进行工作的,
		但是 Client 与 Server 之间的网路连线其实并不见得很稳定,尤其是当你的 Client 电脑很忙的时候。
		此时,万一我要进行一项长时间的工作时,那么风险就很大!鸟哥当初刚刚玩 Unix 时,
		由于鸟哥所在的办公室太小了,无法有多个萤幕与键盘,因此,我都是利用我的 windows 98 
		再以网路连线软体连到 Unix 主机内作业的。当时我跑一个程式要跑 3 天......
		而众所皆知的, Windows 98 的长时间开机的稳定性确实.....
		在某一次执行时,发生了.....剩下 3 个钟头就跑完却『连线终止』的情况~呜呜呜呜~
		又得要跑三天....</li><br>

		<li>另一个常用的时刻则是例如上面的范例二,由于某个突发状况导致你必须要进行某项工作时,
		这个 at 就很好用啦!</ul>

		由于 at 工作排程的使用上,系统会将该项 at 工作独立出你的 bash 环境中,
		直接交给系统的 atd 程式来接管,因此,当你下达了 at 的工作之后,就可以立刻离线了,
		剩下的工作就完全交给 Linux 管理即可!所以棉,如果有长时间的网路工作时,嘿嘿!
		使用 at 可以让你免除网路断线后的困扰喔! ^_^<br><br>

		那么万一我下达了 at 之后,才发现指令输入错误,该如何是好?呵呵!就将他移除啊!
		利用 atq 与 atrm 吧!<br>

<a name=atq_atrm></a><table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>atq</span>
[root@linux ~]# <span class=term_command>atrm [jobnumber]</span>

<span class=term_hd>范例一∶查询目前主机上面有多少的 at 工作排程?</span>
[root@linux ~]# <span class=term_command>atq</span>
10      2005-09-15 23:00 a root
<span class=term_say># 上面说的是∶『在 2005/09/15 的 23:00 有一项工作,该项工作指令下达者为 
# root』而且,该项工作的工作号码 (jobnumber) 为 10 号喔!</span>

<span class=term_hd>范例二∶将上述的第 10 个工作移除!</span>
[root@linux ~]# <span class=term_command>atrm 10</span>
[root@linux ~]# <span class=term_command>atq</span>
<span class=term_say># 没有任何资讯,表示该工作被移除了!</span>
</pre></td></tr></table>

		利用 atq 与 atrm 来控制这个 at 的工作吧! ^_^
	</div>
</div>


<hr><a NAME=cron></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">循环执行的例行性命令</span><br>
<div class=block1>
	相对于 at 是仅执行一次的工作,循环执行的例行性命令则是由 cron (crond) 这个系统服务来控制的。
	由于系统预设就有相当多的例行性工作,因此,这个系统服务是预设启动的。另外,
	由于使用者自己也可以进行例行性工作排程,所以棉, Linux 也提供使用者控制例行性命令的指令 (crontab)。
	底下我们分别来聊一聊棉!<br><br>

	<hr><a name=crontab></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>使用者的设定∶ crontab</span><br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -