最近升级日期:2009/09/11
2. 仅运行一次的工作排程
2.1 atd 的启动与 at 运行的方式: /etc/at.deny 2.2 实际运行单一工作排程: at, atq & atrm, batch 仅运行一次的工作排程 首先,我们先来谈谈单一工作排程的运行,那就是 at 这个命令的运行! atd 的启动与 at 运行的方式 要使用单一工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩意儿。 不过并非所有的 Linux distributions 都默认会把他打开的,所以呢,某些时刻我们必须要手动将他激活才行。 激活的方法很简单,就是这样:
重点是那个『正在启动(或 starting)』项目的 OK 啦!那表示启动是正常的!这部份我们在第十八章会谈及。
如果您真的有兴趣,那么可以自行到 /etc/init.d/atd 这个 shell script 内去瞧一瞧先! ^_^。
至於那个 chkconfig ,你也可以使用 man 先查阅一下啊!我们第十八章再介绍啦!
既然是工作排程,那么应该会有产生工作的方式,并且将这些工作排进行程表中罗!OK!那么产生工作的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。 不过,并不是所有的人都可以进行 at 工作排程喔!为什么?因为安全的理由啊~ 很多主机被所谓的『绑架』后,最常发现的就是他们的系统当中多了很多的怪客程序 (cracker program), 这些程序非常可能运用工作排程来运行或搜集系统资讯,并定时的回报给怪客团体! 所以罗,除非是你认可的帐号,否则先不要让他们使用 at 吧!那怎么达到使用 at 的列管呢? 我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制呢! 加上这两个文件后, at 的工作情况其实是这样的:
透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由於假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。 实际运行单一工作排程 单一工作排程的进行就使用 at 这个命令罗!这个命令的运行非常简单!将 at 加上一个时间即可!基本的语法如下:
老实说,这个 at 命令的下达最重要的地方在於『时间』的指定了!鸟哥喜欢使用『 now + ... 』 的方式来定义现在过多少时间再进行工作,但有时也需要定义特定的时间点来进行!底下的范例先看看罗!
事实上,当我们使用 at 时会进入一个 at shell 的环境来让使用者下达工作命令,此时,建议你最好使用绝对路径来下达你的命令,比较不会有问题喔!由於命令的下达与 PATH 变量有关, 同时与当时的工作目录也有关连 (如果有牵涉到文件的话),因此使用绝对路径来下达命令,会是比较一劳永逸的方法。 为什么呢?举例来说,你在 /tmp 下达『 at now 』然后输入『 mail root -s "test" < .bashrc 』, 问一下,那个 .bashrc 的文件会是在哪里?答案是『 /tmp/.bashrc 』!因为 at 在运行时,会跑到当时下达 at 命令的那个工作目录的缘故啊! 有些朋友会希望『我要在某某时刻,在我的终端机显示出 Hello 的字样』,然后就在 at 里面下达这样的资讯『 echo "Hello" 』。等到时间到了,却发现没有任何信息在萤幕上显示,这是啥原因啊?这是因为 at 的运行与终端机环境无关,而所有 standard output/standard error output 都会传送到运行者的 mailbox 去啦!所以在终端机当然看不到任何资讯。那怎办?没关系, 可以透过终端机的装置来处理!假如你在 tty1 登陆,则可以使用『 echo "Hello" > /dev/tty1 』来取代。
at 有另外一个很棒的优点,那就是『背景运行』的功能了!什么是背景运行啊?很难了解吗?其实与 bash 的 nohup (第十七章) 类似啦! 鸟哥提我自己的几个例子来给您听听,您就了了!
由於 at 工作排程的使用上,系统会将该项 at 工作独立出你的 bash 环境中,
直接交给系统的 atd 程序来接管,因此,当你下达了 at 的工作之后就可以立刻离线了,
剩下的工作就完全交给 Linux 管理即可!所以罗,如果有长时间的网络工作时,嘿嘿!
使用 at 可以让你免除网络断线后的困扰喔! ^_^
那么万一我下达了 at 之后,才发现命令输入错误,该如何是好?就将他移除啊!利用 atq 与 atrm 吧!
如此一来,你可以利用 atq 来查询,利用 atrm 来删除错误的命令,利用 at 来直接下达单一工作排程!很简单吧!
不过,有个问题需要处理一下。如果你是在一个非常忙碌的系统下运行 at ,
能不能指定你的工作在系统较闲的时候才进行呢?可以的,那就使用 batch 命令吧!
其实 batch 是利用 at 来进行命令的下达啦!只是加入一些控制参数而已。这个 batch 神奇的地方在於:他会在 CPU 工作负载小於 0.8 的时候,才进行你所下达的工作任务啦! 那什么是负载 0.8 呢?这个负载的意思是: CPU 在单一时间点所负责的工作数量。不是 CPU 的使用率喔! 举例来说,如果我有一只程序他需要一直使用 CPU 的运算功能,那么此时 CPU 的使用率可能到达 100% , 但是 CPU 的工作负载则是趋近於『 1 』,因为 CPU 仅负责一个工作嘛!如果同时运行这样的程序两支呢? CPU 的使用率还是 100% ,但是工作负载则变成 2 了!了解乎? 所以也就是说,当 CPU 的工作负载越大,代表 CPU 必须要在不同的工作之间进行频繁的工作切换。 这样的 CPU 运行情况我们在第零章有谈过,忘记的话请回去瞧瞧!因为一直切换工作,所以会导致系统忙碌啊! 系统如果很忙碌,还要额外进行 at ,不太合理!所以才有 batch 命令的产生! 那么 batch 如何下达命令呢?很简单啊!与 at 相同啦!例如下面的范例:
你会发现其实 batch 也是使用 atq/atrm 来管理的!这样了解乎? |
|||||||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室