首页 > 代码库 > 【鸟哥的Linux私房菜】 第16章 例行性工作(crontab)

【鸟哥的Linux私房菜】 第16章 例行性工作(crontab)

  在这章中主要讲述了两个命令at(batch) 和 crontab, 其中batch可以理解为at的一种特殊执行方式。

  at: 是个可以处理仅执行一次就结束调度的命令,需要atd服务;

      crontab: 它所设置的工作会一直循环执行下去;需要crond 服务;

仅执行一次的工作调度 : at

1. 打开atd服务

     # /etc/init.d/atd restart  //重启atd服务

    chkconfig atd on   // 加入开机启动

2. at的运行方式

   执行逻辑:事实上,我们使用at 这个命令来生成要运行的工作,并将这个工作以文本文件的形式写入/var/spool/at/ 目录下,该工作就等待atd这个服务的取用与执行了。

       权限控制: 并不是所有人都可以进行at工作调度;

            1)先寻找/etc/at.allow 文件,只有存在于这个文件中的用户才可以使用at,不存在的不允许使用,即使没有存在于/etc/at.deny中;

            2) /etc/at.allow 不存在,寻找/etc/at.deny, 存在于该文件中的不允许使用at, 不存在的则允许使用

        3) 如果均不存在,只有root可以使用at

            注:一般系统上存在一个空的/etc/at.deny, 意为所有用户均可以使用at;

3. at 的运行

  3.1 命令格式

     # at [-mldv] TIME

        # at -c 工作号码

这里不给出at的参数解释,各种使用方式,只给出样例以参考,否则就不是总结,而是抄袭了,而且还想早点睡觉呢!^_^

eg 1:  

 # at now + 5 minutes

     at>/bin/sync   // 进入at shell环境

     at>/bin/sync   // 使用绝对路径,原因是:at在运行时,会跑到执行at命令时的工作目录

   at>/sbin/shutdown -h now

   at><EOT>  // 输入ctrl + d 作为结束符,还记得写邮件的结束符吗? o, 大明湖畔

eg 2:

 # at now + 3 minutes

 at> echo "hello" // hello不会显示到终端,因为at的执行与终端环境无关,stdout/stderrout 都被发到执行者的mail中

 at>echo "hello tty" > /dev/tty1  // 强制输出到tty1终端,这样就ok了

 at><EOT>

 3.2 at的脱机特性

    at具有后台执行的功能,即当使用at定义了任务之后即可以关掉终端环境,因为系统会将at中定义的工作直接托管给atd服务,与当前的bash环境无关。

 3.3 at工作的管理

    atq = at -l  // 查询

    atrm = at -d  //删除

 3.4 batch 的引入

     背景:在系统非常忙碌时执行at,这个不太合理,那该怎么办呢?

     batch: 在系统空闲时执行后台任务。

     batch判断空闲的标准是:CPU load avg < 0.8;  load avg: CPU在单一时间点负责的工作数量,而不是CPU使用率。

     比如:有一个程序一直使用CPU计算能力,则CPU使用率可能是100%, 而load avg 只是接近于1

eg :

   # batch now + 5 minutes

   at> /sbin/sync

   at>/sbin/sync

  at> shutdown -h now

  at><EOT>

同样使用atq, atrm 管理batch定义的任务;   所以我在开头说可以batch为at的一种特殊形式。

先写到这吧,看只要一会,但是写下来却不那么简单。。。。。。坚持

 

 

 

 

 

  

 

 

 

     

 

     

【鸟哥的Linux私房菜】 第16章 例行性工作(crontab)