2014-01-21 131 views
1

我正在使用perl腳本通過crontab解壓zip文件。腳本正常工作,如果我手動執行它。但每當我在cron中設置腳本不再工作。我測試過cron設置其他腳本文件正在從cron工作只有這個壓縮解壓縮腳本不起作用。由crontab提取Zip文件

腳本如下:

#!/usr/bin/perl 
use IO::Uncompress::Unzip qw(unzip $UnzipError); 
$dir = '/root/perl'; 
open (han2, "ls -l $dir/*.zip |awk '{print \$9}'|"); 
@array1 = <han2>; 
chomp(@array1); 
for ($i=0;$i<=$#array1;$i++) { 

$zipfile = $array1[$i]; 
$u = new IO::Uncompress::Unzip $zipfile 
    or die "Cannot open $zipfile: $UnzipError"; 

die "Zipfile has no members" 
    if ! defined $u->getHeaderInfo; 

for ($status = 1; $status > 0; $status = $u->nextStream) { 
    $name = $u->getHeaderInfo->{Name}; 
    warn "Processing member $name\n" ; 

    if ($name =~ /\/$/) { 
     mkdir $name; 
    } 
    else { 
     unzip $zipfile => $name, Name => $name 
      or die "unzip failed: $UnzipError\n"; 
    } 
} 

} 

crontab的設置:

34 14 * * * /root/perl/./unzip.pl > /dev/null 2>&1 

請幫我的cronjob做這個任務

+0

如果你的腳本位置是'/ root/perl/unzip.pl',那麼試試'34 14 * * */usr/bin/perl /root/perl/unzip.pl>/dev/null 2>&1' –

+0

yes位置是/root/perl/unzip.pl。我也改變了這個設置,但它仍然沒有解壓縮文件。 – user2916639

回答

1

當cron的執行你的腳本,目前directoy可能贏't /root/perl。嘗試chdir($dir)設置$dir後,或在必要時使用完整路徑:

$u = new IO::Uncompress::Unzip "$dir/$zipfile" 
or die "Cannot open $zipfile: $UnzipError"; 

mkdir "$dir/$name"; 

unzip "$dir/$zipfile" => "$dir/$name" ... 

更改爲正確的目錄可能是更容易。

+0

非常感謝我已經改變了chdir($ dir),現在它的工作非常感謝。 – user2916639