IT技术博客大学习 共学习 共进步

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

Linux|系统管理|WEB开发 2010-01-04 18:30:54 浏览 2,705 次

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系统管理手册习题实践 (阅读 3,525)
  2. linux系统管理技术手册第十二章系统实践 (阅读 3,204)
  3. Linux系统管理技术手册第五章习题实践 (阅读 3,185)
  4. Linux系统管理技术手册第10章系统实践 (阅读 3,143)
  5. Linux系统管理技术手册第三章习题实践 (阅读 3,065)
  6. Linux系统管理技术手册第四章习题实践 (阅读 3,002)
  7. Linux系统管理技术手册第十三章系统实践 (阅读 2,823)
  8. Linux系统管理技术手册第六章习题实践 (阅读 2,546)
  9. Linux系统管理手册第二章习题实践 (阅读 2,406)
  10. Linux系统管理技术手册第七章习题实践 (阅读 2,384)