我怎样才能拦截gzip中的错误,所以cron看不到它们?

Ed *_*yer 0 shell scripting perl cron

那么,好吧,作业在cron中运行:它获取压缩文件并处理它们.如果文件已损坏,则会删除它们.有时它们在远程服务器上很糟糕,在这种情况下,每次都会下载和删除它们.

我的cron广泛记录到STDOUT(定向到.crontab中的logfile),使用STDERR仅用于导致脚本停止的事情:我喜欢在发生坏事时从cron收到电子邮件; 只是损坏的文件不应该在此列表中.

我需要'gunzip'的输出告诉我文件是否已损坏.但是,我厌倦了每次遇到错误的文件时都会收到来自cron的电子邮件.如何调用'gunzip'以便错误不会触发来自cron的电子邮件,同时仍然让调用'gunzip'的脚本知道它失败了?

这可能是一个非常简单的,但我对这个cron的东西很新.

重要PS:'gunzip'是从Perl脚本调用的,使用

$gunzip_result=system("gunzip $gzfile");
if($gunzip_result){
  print,"$gzfile is bad: deleting...\n"; 
  unlink $gzfile;
};
Run Code Online (Sandbox Code Playgroud)

Ya.*_*man 5

您可能想考虑使用IO :: Uncompress :: Gunzip,它具有更好的错误控制和处理能力.以下是可能有用的代码段:

use IO::Uncompress::Gunzip qw(gunzip $GunzipError);

eval (
     gunzip $infh => $outfh or die $GunzipError
);
if $@ <do something with $GunzipError>
Run Code Online (Sandbox Code Playgroud)

$ GunzipError叙述了出了什么问题