技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> Linux系统管理技术手册第8章习题实践

Linux系统管理技术手册第8章习题实践

浏览:1896次  出处信息

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

建议继续学习:

  1. Linux系统管理手册习题实践    (阅读:2755)
  2. linux系统管理技术手册第十二章系统实践    (阅读:2278)
  3. Linux系统管理技术手册第10章系统实践    (阅读:2206)
  4. Linux系统管理技术手册第三章习题实践    (阅读:2153)
  5. Linux系统管理技术手册第四章习题实践    (阅读:2111)
  6. Linux系统管理技术手册第五章习题实践    (阅读:2106)
  7. Linux系统管理技术手册第十三章系统实践    (阅读:2002)
  8. Linux系统管理技术手册第七章习题实践    (阅读:1804)
  9. Linux系统管理手册第二章习题实践    (阅读:1726)
  10. Linux系统管理技术手册第六章习题实践    (阅读:1742)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:虚拟内存机制浅析
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1