问题:
自动将192.168207.230上的日志转存到192.168.207.27上。
在192.168.207.230上执行shell脚本,通过调用系统命令scp实现日志的转存。
1.将230上的/var/log/messages*全部都打包到一个gz文件:
文件名格式:log_230_message-{date}.tar.gz,例如log_230_message-2011-12-26.tar.gz
2.通过expect脚本实现交互式转存。
3.清空/var/log/messages*
##shell 部署到192.168.207.230上的var/user-shell/##
##crontabl:* 1 * * * 7 root /bin/bash /var/user-shell/translation-message-to27.sh##
##install expect##
<1>
yum -y install expect
or find expect via rpmfind.net
wget ftp://195.220.108.108/linux/centos/4.8/os/i386/CentOS/RPMS/expect-5.42.1-1.i386.rpm
rpm -ivh expect-5.42.1-1.i386.rpm
<2>
CODE::do_traslate.sh
/****************************************************************************/
#!/usr/bin/expect
########################################################
#args: #
#host :remote host, on which file will be stored #
#password:password for root on $host #
#filename:file which will be translated by scp #
#ddir :destination directory #
########################################################
proc usage { } {
puts stderr "usage:$::argv0 filename host(or ipaddress) password directory"
exit 1
}
proc connect {pass} {
expect {
"(yes/no)?" {
send "yes\n"
expect "*password:" {
send "$pass\n"
expect {
"*#" {
return 0
}
}
}
}
"*password:" {
send "$pass\n"
expect {
"*#" {
return 0
}
}
}
}
return 1
}
if { $argc !=4 } { usage }
set filename [lindex $argv 0]
set host [lindex $argv 1]
set password [lindex $argv 2]
set ddir [lindex $argv 3]
puts stderr $filename;
puts stderr $host;
puts stderr $password;
puts stderr $ddir;
spawn scp -p ${filename} root@${host}:${ddir}
#expect "*password:" {
# puts stderr "direct\n"
# send ${password}
# send "\n"
# return 0
# }
if { [connect $password] }
{
exit 1
}
puts stderr '\n';
exit 0
/****************************************************************************/
CODE::traslation-message-to27.sh
/****************************************************************************/
#!/bin/bash
set -x;
MESSAGE_DIR='/var/log';
PREFIX="log_230_message";
DATE_STR=`date '+%Y-%m-%d'`;
echo $DATE_STR;
filename=$PREFIX"-"$DATE_STR;
sourcefile=$MESSAGE_DIR"/messages*";
PWD=`pwd`;
tarfilename=$PWD"/"$filename".tar.gz";
echo $filename;
#tar -czf $tarfilename $sourcefile;
PASSWORD="SOMEPASSWORD";
HOST=192.168.207.27';
HOST_DIR="/SOMEDIR/$filename.tar.gz";
cmd="expect do-translate.sh $tarfilename $HOST $PASSWORD $HOST_DIR";
echo `$cmd`;
for filename in $sourcefile
{
if [ -e $filename ]
then
echo $filename;
echo ""> $filename;
fi
}
/****************************************************************************/
[参考]
http://archive.cnblogs.com/a/1909977/