开发环境有个要求,要把主机用起来,所以就准备把原来的单节点部署成多节点,同时又想让开发人员感知最小,也就是上开发环境的操作和原来一样。
第一件事是把tomcat整个scp到另一个节点
scp -r webProject9060 user2@192.168.1.200:/user2/
然后输入主机密码,就等待scp完成了。同时在ng那边路由做好。
现在的问题就是,每次将代码上到开发,是不是要对两个节点进行维护?
如果用scp,则每次都是全量复制过去,速度可能不是那么友好,同时目的是让开发人员操作最简单,也就是和以往一样,关闭,重启。
所以最终决定在tomcat的bin下面,添加一个restart.sh脚本,代替原来的start.sh
首先解决的是增量的问题,百度找到find可以解决
find /user1/webProject9060/webapps/webProject/ -ctime -1 -type f
使用find,列出工程下面,变动日期为近一天的文件列表
同时写到文件列表吧
find /user1/webProject9060/webapps/webProject/ -ctime -1 -type f > source.list
增量文件列表有了,那么如何使用呢?
了解到scp不能根据文件列表,顶多可以用匹配模式,而且目标路径不是特别灵活。于是找到了更牛的rsync,结果没想到主机上已经装了。
同时rsync可以主动给密码的,但好像因为没有root权限,没法用--password-file
所以又想到了expect ,用它来支持密码发送。
先安装expect,需要tcl,所以装tcl
wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz
get之后,上传到开发服务器,解压,进入子目录unix,交叉编译,make
./configure --prefix=/user1/tool/tcl --enable-shared
make
make install
然后装expect
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
get之后,上传到开发服务器,解压,进入目录,交叉编译,make
./configure --prefix=/user1/tool/expect --with-tcl=/user1/tool/tcl/lib --with-tclinclude=../tcl8.4.11/generic
make
make install
开始脚本编写
思路是---》
1、本节点重启
2、获取增量文件清单
3、格式化文件清单
4、拷贝文件过去
5、重启
restart.sh内容
#!/bin/bash
ps -ef|grep eask|grep webProject|grep -v grep| cut -c 9-15 | xargs kill -s 9 #杀死本地进程
./startup.sh #启动
find /user1/webProject9060/webapps/webProject/ -ctime -1 -type f > source.list #写到清单
sed -i s/'user1'/'user2'/g source.list #将文件清单中user1字符串替换为user2
echo "Incremental this day upload to 200..."
cat source.list
./rsync.sh #调用远程命令
rsync.sh内容
#!/user1/tool/tcl/bin/expect -f #这里指定except解释器,因为没权限
spawn rsync -cvp --files-from=source.list / user2@192.168.1.200:/ #rsync文件清单
expect {
"password:" {send "user2\r"} #发送密码
}
expect eof
spawn ssh user2@192.168.1.200 "ps -ef|grep eask|grep webProject9060 |grep -v grep| cut -c 9-15 | xargs kill -s 9;sh /user2/webProject9060/bin/startup.sh; exit" #发送重启命令
expect {
"password:" {send "user2\r"} #发送密码
}
expect eof
授权 、
chomd 777 rsync.sh
chmod 777 restart.sh
完成!