- 论坛徽章:
- 0
|
我有个perl脚本,手动运行时能够正常运行,但是,放在crontab中就不能够正常运行了,请高手帮忙解决一下。很急,谢谢!
#!/usr/bin/perl
use Expect;
use Date::Simple ('date', 'today');
my $timeout=3;
my $delay=5;
##log name##
my $httplog='http-web';
my $rglog='rg';
my $iolog='io';
##remote log dir##
my @path=qw( /opt/oc4j903/j2ee/home/gis/WEB-INF/applications/httplog /opt/oc4j903/j2ee/home/gis/WEB-INF/applications/iolog /opt/oc4j903/j2ee/home/gis/WEB-INF/applications/rglog );
##local log dir##
my @lpath=qw(/opt/gislog_backup/39/ /opt/gislog_backup/40/);
##server IP##
my @ip=qw( 192.168.154.39 192.168.154.40 );
##local log dir##
#my @lpath=qw(/opt/gislog_backup/39/ /opt/gislog_backup/40/);
##1 day ago##
my $day = today() - 1;
##ana tmp_dir##
my $ana_tmp="/opt/gislog_backup/tmp/";
##delete file in tmp_dir##
#unlink glob "/opt/gislog_backup/tmp/http/*";
#unlink glob "/opt/gislog_backup/tmp/io/*";
#unlink glob "/opt/gislog_backup/tmp/rg/*";
############scp log file from SERVER#########
foreach my $ip (@ip){
if("$ip" eq "192.168.154.39" {
local $pass="M1A\@P3";
foreach my $paths (@path){
my $tmp=(split(/\//,"$paths" )[8];
print "$ip#############$tmp\n";
if($tmp eq "httplog" {
print "$ip###########$tmp#######httplog\n";
&remote_expect($ip,$paths,$httplog,$day,$lpath[0]);
}elsif($tmp eq "iolog" {
print "$ip###########$tmp#######iolog\n";
&remote_expect($ip,$paths,$iolog,$day,$lpath[0]);
}elsif($tmp eq "rglog" {
print "$ip###########$tmp#######rglog\n";
&remote_expect($ip,$paths,$rglog,$day,$lpath[0]);
}
}
}
if("$ip" eq "192.168.154.40" {
local $pass="M1A\@P3";
foreach my $paths (@path){
my $tmp=(split(/\//,"$paths" )[8];
if($tmp eq "httplog" {
print "$ip###########$tmp#######httplog\n";
&remote_expect($ip,$paths,$httplog,$day,$lpath[1]);
}elsif($tmp eq "iolog" {
print "$ip###########$tmp#######iolog\n";
&remote_expect($ip,$paths,$iolog,$day,$lpath[1]);
}elsif($tmp eq "rglog" {
print "$ip###########$tmp#######rglog\n";
&remote_expect($ip,$paths,$rglog,$day,$lpath[1]);
}
}
}
}
##remode copy sub##
sub remote_expect{
my ($t_ip,$t_paths,$t_httplog,$t_day,$t_lpath)=@_;
my $exp = Expect->spawn("scp root\@$t_ip {t_paths}/${t_httplog}-access.${t_day}.log $t_lpath") or die "Can't spawn $cmd\n";
$exp->expect($timeout,'-re','root*[Pp]assword:');
$exp->send_slow($delay, "$pass\n");
$exp->interact();
$exp->hard_close();
}
########unite file############
##httplog##
open HTTP39_FILE, "$lpath[0]${httplog}-access.${day}.log";
open HTTP_FILE,">>/opt/gislog_backup/tmp/http/${httplog}-access.${day}.log";
while (<HTTP39_FILE>) {
print HTTP_FILE $_;
}
close(HTTP39_FILE);
open HTTP40_FILE,"$lpath[1]${httplog}-access.${day}.log";
while (<HTTP40_FILE>) {
print HTTP_FILE $_;
}
close(HTTP40_FILE);
close(HTTP_FILE);
##iolog##
open IO39_FILE, "$lpath[0]${iolog}-access.${day}.log";
open IO_FILE,">>/opt/gislog_backup/tmp/io/${iolog}-access.${day}.log";
while (<IO39_FILE>) {
print IO_FILE $_;
}
close(IO39_FILE);
open IO40_FILE,"$lpath[1]${iolog}-access.${day}.log";
while (<IO40_FILE>) {
print IO_FILE $_;
}
close(IO40_FILE);
close(IO_FILE);
##rglog##
open RG39_FILE,"$lpath[0]${rglog}-access.${day}.log";
open RG_FILE,">>/opt/gislog_backup/tmp/rg/${rglog}-access.${day}.log";
while (<RG39_FILE>) {
print RG_FILE $_;
}
close(RG39_FILE);
open RG40_FILE,"$lpath[1]${rglog}-access.${day}.log";
while (<RG40_FILE>) {
print RG_FILE $_;
}
close(RG40_FILE);
close(RG_FILE);
crontab -l的内容
*/5 * * * * /usr/bin/perl /path/to/filename.pl
联系方式:houyingjun2003@hotmail.com |
|