问题:
自动将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/