Захват завершения BZIP2 в Perl

Вот что у меня есть до сих пор:

#!/usr/bin/perl

use strict;
use warnings;

use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error);
use File::Find;
use File::Basename;

my $directory = "/usr/www/op1/public/server";
my @list_of_files;

find sub {
        return if -d;
        my $current = basename("$File::Find::name");

        if ($current =~ /\.bz2$/i)
        {
                #print "<$current> is already compressed! Moving along!\n";
                return;
        }

        print "<$current> is being compressed!\n";
        bzip2 $File::Find::name => "$File::Find::name.bz2";

        if (!("$Bzip2Error" eq ""))
        {
                print "\n$Bzip2Error at $File::Find::name\n";
                print "Trying again to compress <$current>\n";
                bzip2 $File::Find::name => "$File::Find::name.bz2" or print "FAILURE 2!!!";
        }
}, "$directory";

По сути, во время bziping, если он решит прекратить:

<bobsagot> is being compressed!
<arthur.bsp.bz2> is already compressed! Moving along!
<reed.bsp.bz2> is already compressed! Moving along!
<bobby.bsp.bz2> is already compressed! Moving along!
<bigjoe.bsp> is being compressed!
Terminated

Он немедленно поднимется с того места, где он потерпел неудачу, и продолжит работу, однако я не распечатываю ошибку из $Bzip2Error, поэтому я в недоумении. Как я могу зафиксировать событие сбоя bzip2?

Спасибо!


person Rhododendron    schedule 15.04.2013    source источник


Ответы (2)


Вы сделали ошибку вырезания и вставки в своем коде? Строка, начинающаяся с «system(», неуместна.

Сценарий завершается сам по себе во время вызова bzip2?

Если вы напишете такой код, что произойдет?

if ( ! bzip2 $File::Find::name => "$File::Find::name.bz2")
{
    print "\nBzip Errir is [$Bzip2Error] System Error is [$!] at $File::Find::name\n";
}
person pmqs    schedule 16.04.2013
comment
Фрагмент, который вы разместили, ничего не печатает :( - person Rhododendron; 17.04.2013
comment
Как завершается работа скрипта? bzip2 должен возвращать false, если сжатие не удалось. - person pmqs; 17.04.2013
comment
Я думаю, что мое время выполнения ограничено 60 секундами, так что это вне моей досягаемости. - person Rhododendron; 17.04.2013
comment
Вы работаете в настройке, в которой скрипт уничтожается через 60 секунд? Если да, то это зависит от того, как его убивают. - person pmqs; 17.04.2013
comment
Вы можете попробовать END { print \nОшибка Bzip [$Bzip2Error] Системная ошибка [$!] \n } - person pmqs; 17.04.2013
comment
Да, это потерянная надежда, я просто возился с второстепенным веб-сервером на виртуальном хостинге. Я переместил все на свой VPS, так что да... - person Rhododendron; 29.04.2013

Общий хостинг ограничивает время выполнения Perl до 60 секунд. Потерял надежду :D

person Rhododendron    schedule 29.04.2013