重点内容 首先讲一下背景,我工作的这家公司暂定为A吧,有位Z兄弟提出一个问题,为毛线自己前一天改好灰常飘飘的/etc/motd,第二天都会被覆盖掉。并且带着很不削的口气说AWS怎么能从底层修改我们的文件呢
这个问题其实怎么解决?从一个资深的系统管理员和运维架构师来讲,解决这个问题必然要从下面几方面着手:
- 第一、EC2使用cloud-init
- 第二、crontab里是否执行了什么定时任务
- 第三、initd或systemd
其实第一个显而易见不会有什么结果,因为cloud-init大多用于在instance初始化时候执行一系列的脚本。但出于职业的本能我还是扫了一眼。怎么做能够省时间呢?
在shell里执行下面的命令,就可以得知那些文件内部包含motd字样,同时打印出在第几行出现的,正如前面所说在这里并没有找到什么结果。
grep -n motd /etc/cloud/*
下来轮到crontab了,怎么处理呢?还是用grep这样搜索最快。
$ grep -n motd /etc/cron.d/*
grep: /etc/cron.d/sysstat: Permission denied
/etc/cron.d/update-motd:4:@daily root /sbin/start --quiet update-motd
$ cat /etc/cron.d/update-motd
# Delay a random time between 0 and 360 minutes (6 hours) to avoid having all
# instances update at the same time.
RANDOM_DELAY=360
@daily root /sbin/start --quiet update-motd
看看找到什么了?/etc/cron.d/update-motd第四行,就是这句话致使每天都会去覆盖motd文件。
接下来呢,直觉告诉我肯定会有什么地方写着一个自启动以保证这个脚本在每次启动时也能被自动执行。
正如所料,发现/etc/init/目录下面有个文件做了些什么。
$ grep -n motd /etc/init/*
/etc/init/update-motd.conf:2:exec /usr/sbin/update-motd
$ cat /etc/init/update-motd.conf
start on stopped rc RUNLEVEL=[2345]
exec /usr/sbin/update-motd
这下明白了吧。就是这两个地方使得/etc/motd文件被覆盖了。其实如果有心做些研究,解决这个问题也是分分钟的事情(从头到尾找到问题所在用了一分钟时间而已)。
那么,找到问题我们查查是谁干的吧,首先查查这个文件时谁的rpm包安装的,那么执行下面的命令看看。
$ rpm -qf /etc/init/update-motd.conf
update-motd-1.0.1-3.0.amzn1.noarch
我们看到是update-motd-1.0.1-3.0.amzn1.noarch.rpm这个包,那么再打开这个包看看。
$ rpm -qi update-motd-1.0.1-3.0.amzn1.noarch
Name : update-motd
Version : 1.0.1
Release : 3.0.amzn1
Architecture: noarch
Install Date: Wed 28 Jan 2015 05:43:48 AM CST
Group : System Environment/Base
Size : 4721
License : ASL 2.0
Signature : RSA/SHA256, Thu 06 Nov 2014 03:14:06 AM CST, Key ID bcb4a85b21c0f39f
Source RPM : update-motd-1.0.1-3.0.amzn1.src.rpm
Build Date : Sat 01 Nov 2014 06:15:38 AM CST
Build Host : build-60001.build
Relocations : (not relocatable)
Packager : Amazon.com, Inc. <http://aws.amazon.com>
Vendor : Amazon.com
Summary : Framework for dynamically generating MOTD
Description :
Framework and scripts for producing a dynamically generated Message Of The Day.
Based on and compatible with the framework implemented Ubuntu.
是不是很有意思,找到了真凶。要解决这个问题嘛,很简单直接卸载这个包再重启机器,就不会再次发生motd文件被覆盖的问题了。
* 总结一下,有时候抱怨是没有任何作用的,有抱怨的时间动手查一下一定会有收获 *