首页 > 代码库 > 【鸟哥的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)