因工作需要,接触了VMware公司的VMware-VMvisor-3.5.0_Update_3-123629。进入后台发现是很古怪的Linux系统:裁剪的内核、busybox平台、定制的esxcfg-xxx命令。
使用一段时间后发现其自身也并非十分稳定,有事后台程序在高负载情况下会失效,需要自动重启,也需要增加些特殊的后台功能。于是想到加个自制的后台看门狗脚本。然而,什么新增的脚本放上去,一旦重启系统后就没了,除非将新文件放到datastore的目录下,但是如何保证启动ESXi时能启动我的脚本也是个麻烦事。
经过一番研究,发现其自身一个机制可以帮忙。
ESXi自带脚本/sbin/backup.sh的61行左右有句话“# Save all modified files in /etc"。ESXi的自身机制包括启动后将一个实现压缩好的系统环境包释放出来,因此自己擅自添加新文件没有用。而是用户的配置是需要保存的,所以也有备份修改的机制。
在/etc/init.d下面有若干服务程序,其中hostd为shell脚本,可被编辑修改,也可通过/sbin/backup.sh进行修改后保存。
我的做法如下:
1、创建自己的看门狗脚本,存到永久存储区域/vmfs/volumes/datastore1下
vi /vmfs/volumes/datastore1/my_watchdog.sh
-------------------------------------------------------------------------------------------
#!/bin/bash
LOG=/vmfs/volumes/datastore1/mydog.log
DISK=/vmfs/volumes/datastore1
PIDFILE=/var/run/esxi_dog.pid
#Should I run?
if [ -e $PIDFILE ]; then
exit 0
else
echo $$ > $PIDFILE
echo "Hello esxi" > $LOG
fi
# ESXi's services may still booting, my dog wait for a while
sleep 300
while [ 1 ];
do
date >> $LOG
cp /var/log/message* /vmfs/volumes/datastore1/
sleep 60
done
-----------------------------------------------------------------------------------------------
2、修改/etc/init.d/hostd,保证我的看门狗能在ESXi启动后启动。
vi /etc/init.d/hostd
在它的start函数最后添加上setsid /vmfs/volumes/datastore1/my_watchdog.sh &
在它的stop函数最后添加上kill -9 `cat /var/run/esxi_dog.pid`和 rm -f /var/run/esxi_dog.pid
3、确保添加修改完毕后,执行/sbin/backup.sh 1,回车;然后命令重启esxi。
o了!