-->
程序需要经常更新,每次手动键入命令太难受,将操作过程写成脚本,方便又快捷。
具体过程如下:
首先从文件服务器中取得程序文件(zip压缩),copy到本地,解压,更改其数据库配置文件,打包,父进程分叉(需要上传至多台服务器)子进程将程序包上传至服务器。
脚本中的外部命令太多了,呵呵,实用就行,完全用perl的模块来完成有点太麻烦了!
#!/usr/bin/perl -w
use strict;
my $projectname=shift;
my $projectzip="${projectname}.war.zip";
my $projectgz="${projectname}.tgz";
my $projectwar="${projectname}.war";
print "清理过时文件\n";
`cd /tmp;rm -rf ${projectname}*`;
print "将文件copy到本机/tmp目录并解压 ";
`cd /tmp;scp fileserver:/data/$projectzip .;unzip $projectzip`;
print "更改数据库配置文件 ";
`/bin/cp /root/jbosswebapp/${projectname}.xml /tmp/${projectwar}/WEB-INF/classes/applicationContext-resources.xml`;
print "将项目打包 ";
`cd /tmp;tar zcvf $projectgz $projectwar`;
foreach my $host (qw(rs1 rs2 rs3 rs4)){
if(fork){
print "我是父进程我在进行分叉 ";
}else{
print "将$projectgz上传到主机$host上 ";
if(`cd /tmp;cat $projectgz |ssh $host "cd /usr/local/jboss/server/default/deploy/;rm -rf $projectwar;tar zxpvf -" >/dev/null`){
print "文件未能上传至主机$host\n";
}else{
print "文件已经上传至主机$host\n";
}
exit;
}
}
use strict;
my $projectname=shift;
my $projectzip="${projectname}.war.zip";
my $projectgz="${projectname}.tgz";
my $projectwar="${projectname}.war";
print "清理过时文件\n";
`cd /tmp;rm -rf ${projectname}*`;
print "将文件copy到本机/tmp目录并解压 ";
`cd /tmp;scp fileserver:/data/$projectzip .;unzip $projectzip`;
print "更改数据库配置文件 ";
`/bin/cp /root/jbosswebapp/${projectname}.xml /tmp/${projectwar}/WEB-INF/classes/applicationContext-resources.xml`;
print "将项目打包 ";
`cd /tmp;tar zcvf $projectgz $projectwar`;
foreach my $host (qw(rs1 rs2 rs3 rs4)){
if(fork){
print "我是父进程我在进行分叉 ";
}else{
print "将$projectgz上传到主机$host上 ";
if(`cd /tmp;cat $projectgz |ssh $host "cd /usr/local/jboss/server/default/deploy/;rm -rf $projectwar;tar zxpvf -" >/dev/null`){
print "文件未能上传至主机$host\n";
}else{
print "文件已经上传至主机$host\n";
}
exit;
}
}

发表评论