Linux系统管理技术手册第8章习题实践
E8.1 在您的系统上,一个本地用户以有规律的时间间隔运行开销很大的任务,滥用他的crontab特权。在几次要求他停止后,您被迫收回他的特权。列出删除他的当前crontab文件,并确保他不能增加新的crontab文件所需的步骤。
A:假定用户test就是我们需要惩罚的用户,目前你的帐号是root。列出帐号test的crontab文件指令是:
root@wgzhao-nb:~# crontab -u test -l # m h dom mon dow command 20 3 * * * /usr/bin/hugecmd
删除的指令是:
root@wgzhao-nb:~# crontab -u test -r
要禁止该用户添加新的crontab文件,需要编辑(创建)/etc/cron.deny文件,将对应的帐号加入其中
echo “test” >>/etc/cron.deny
其结果如下演示:
以下是引用片段: root@wgzhao-nb:~# crontab -u test -e You (test) are not allowed to use this program (crontab) See crontab(1) for more information |
E8.2 想出3项需要定期运行的任务,写出每项任务的crontab配置项,指出配置文件应该送入那个crontab文件。
A:实际上,系统默认的情况下,已经有大量的定时任务了,以我的ubuntu 9.10 桌面系统来看,默认的定时任务多达36项。从系统管理角度到应用程序角度,不一而足。可以仔细分析/etc/cron.*/*下的配置项来获得对crontab的进一步认识。
E8.3 找到您运行的Linux系统上的crontab文件,选出3个。解读每一个文件,并说明他何时运行,做什么。以及您认为为什么需要这个配置项。
A:我们就分别从/etc/cron.{daily,weekly,d}里找一个出来分析把。
先分析/etc/cron.daily/sysstat,内容如下:
以下是引用片段: #!/bin/sh # Generate a daily summary of process accounting. Since this will probably # get kicked off in the morning, it is run against the previous day data. # our configuration file DEFAULT=/etc/default/sysstat # default settings, overriden in the above file ENABLED=false SA2_OPTIONS="" [ ! -x /usr/lib/sysstat/sa2 ] && exit 0 # read our config [ -r "$DEFAULT" ] && . "$DEFAULT" [ "$ENABLED" = "true" ] || exit 0 exec /usr/lib/sysstat/sa2 -A $SA2_OPTIONS |
这段脚本的目的是生成SAR文件,方便以后分析当前的状态,包括系统日志,性能等。对于服务器而言,这个服务是比要的,而且应该每天执行。这样万一某天服务器出现故障,至少从这些SAR文件可以获得一些信息,看看是什么问题导致系统出现了故障,看是软件故障,还是性能的问题。
我们再看/etc/cron.weekly/clean-log
脚本内容如下:
以下是引用片段: #!/bin/bash #delete all archived log file (which has .gz suffix) cd /var/log find . -name \*.gz -exec rm -f ’{}’ \; find . -name \*.old -exec rm -f ’{}’ \; exit 0 |
这段脚本每周的周一回执行一次,目的是删除/var/log下的所有归档日志。其目的当然是节省磁盘空间。当然,如果你觉得你的硬盘足够大,那么这段定时任务就并不是非要不可的了。
/etc/cron.d/php5配置项,内如如下:
以下是引用片段: # /etc/cron.d/php5: crontab fragment for php5 # This purges session files older than X, where X is defined in seconds # as the largest value of session.gc_maxlifetime from all your php.ini # files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime # Look for and purge old sessions every 30 minutes 09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm |
代码前面的注释说的非常明白了。这段代码每30分钟执行一次,主要是删除过期的会话文件。如果是一个高负载的web站点,使用了大量的会话,这个定时任务很有必要。
♥E8.4 编写一个脚本,保持您有帐号的所有机器上的启动文件(~/.[a-z]*}同步。从cron定期运行这个脚本。
A: 如果文件拷贝走scp方式,而且需要采取密码认证方法,恐怕这个脚本就不会那么容易写了,因为scp不接受从配置文件获取密码,必须是从标准输入接受(至少我目前是这样理解的),因此同步的前提,是首先确保这些有帐号的机器做了公钥认证模式。剩下的就是同步启动文件了,不过在同步之前,考虑到一些特别情况,最好是先备份机器上的配置文件。示例脚本如下:
以下是引用片段: #!/bin/bash file="machines.txt" # all machines list include account ,each line format account@hostname #first backup current startup scripts for i in `cat $file` do ssh $i tar -czf ~/script-backup-`date +%s`.tar.gz ~/.[a-z]* scp ~/.[a-z]* $i:~/ done |
然后把这个脚本丢到/etc/cron.{hourly,daily,weekly,monthly,d}的任何一个目录都可以。
♥E8.5 以du ,sort和head命令的手册页作为参考,编写一个脚本,确定系统上最大的10个主(home)目录。在每周一的夜里12:00执行这个脚本,并且让它把输出结果发给您。
A:暂时找不到拥有大量帐号的机器,我就用/usr/share作为目标替代吧。
首先测试脚本,一般来说,这种要求,应该当行脚本可以搞定:
du -s * |sort -rn |head -n 10
接下就是把这个结果发送出去,那么采取mail指令好了,先把上述结果保存到一个临时文件,然后把这个临时文件的内容当作邮件正文发出去。采用管道方式,连临时文件都省略了。
du -s * |sort -rn |head -n 10 |mail -s “statistic report” root@localhost.localdomain
收信如下:
以下是引用片段: [root@localhost locale]# mail Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root@localhost.localdomain Thu Dec 31 00:33 25/679 "statistic report" & 1 Message 1: From root@localhost.localdomain Thu Dec 31 00:33:02 2009 Date: Thu, 31 Dec 2009 00:33:02 +0800 From: root To: root@localhost.localdomain Subject: statistic report 8836 fr 8728 es 8412 de 7604 sv 7432 ru 6700 ja 6432 it 6120 pl 6032 gu 5956 tr |
建议继续学习:
- Linux系统管理手册习题实践 (阅读:2784)
- linux系统管理技术手册第十二章系统实践 (阅读:2323)
- Linux系统管理技术手册第10章系统实践 (阅读:2245)
- Linux系统管理技术手册第三章习题实践 (阅读:2191)
- Linux系统管理技术手册第五章习题实践 (阅读:2172)
- Linux系统管理技术手册第四章习题实践 (阅读:2144)
- Linux系统管理技术手册第十三章系统实践 (阅读:2056)
- Linux系统管理技术手册第七章习题实践 (阅读:1867)
- Linux系统管理技术手册第六章习题实践 (阅读:1793)
- Linux系统管理手册第二章习题实践 (阅读:1746)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:mlsx 来源: Linux|系统管理|WEB开发
- 标签: Linux系统管理技术手册 习题
- 发布时间:2010-01-04 18:30:54
- [66] Go Reflect 性能
- [65] Oracle MTS模式下 进程地址与会话信
- [64] 如何拿下简短的域名
- [59] android 开发入门
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [58] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [46] 读书笔记-壹百度:百度十年千倍的29条法则