[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Script muy lento en ocasiones



Hola gente,
tengo el siguiente script escrito en perl que hace un simple POST http
a una dirección web. En la mayoría de los casos funciona perfectamente
y con una velocidad más que aceptable. En 2, 3 segundos está
completado, pero luego hay otras veces que se queda pillado y está
intentando ejecutarse unos 8, 10 minutos. Lógicamente al script se le
mandan todos los parámetros correctos y el servidor que recibe el post
está funcionando en todo momento y hay comunicación. Creo que el
problema está en que el script "no arranca", por decirlo de alguna
manera ya que las líneas de syslos no aparecen y cuando salen, salen
todas.
¿Alguna idea de por dónde puede estar el fallo?

Source:

#!/usr/bin/perl -w

use strict;
use warnings;
use Sys::Syslog;
use Sys::Syslog qw(:DEFAULT setlogsock);
use Sys::Syslog qw(:standard :macros);
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use File::Temp qw(tempfile);
use File::stat;

open STDIN, '/dev/null';
open STDOUT, '>/dev/null';
open STDERR, '>/dev/null';

openlog 'faxqr', 'pid', LOG_DAEMON;

my $fax_id = shift;
my $url_to = shift;
my $tiff = shift;
my $fax_number = shift;
my $destination_number = shift;

syslog ('daemon|info', "$fax_id: Checking file");

if (-f $tiff)
{
        syslog ('daemon|info', "$fax_id: file exist");
        my $sb=stat($tiff);
        if($sb->size > 0)
        {
                syslog ('daemon|info', "$fax_id: file size > 0 KB's");
                syslog ('daemon|info', "$fax_id: URL: $url_to.");
                syslog ('daemon|info', "$fax_id: origin: $fax_number.");
                syslog ('daemon|info', "$fax_id: destination:
$destination_number.");
                syslog ('daemon|info', "$fax_id: tiff: $tiff.");

                syslog ('daemon|info', "$fax_id: Creating a PDF file");
                my ($fh, $pdf) = tempfile("/tmp/faxXXXXXX", SUFFIX => '.pdf');
                open(DST, '-|', '/usr/bin/tiff2pdf', '-n', '-o', $pdf, $tiff);
                close DST;

                my $ua = LWP::UserAgent->new();
                $ua->timeout(10);
                my $request = POST $url_to ,
Content_Type=>'form-data', Content =>
[Number=>"$fax_number",Name=>"$destination_number",FichPdf=>[$pdf]];
                my $results=$ua->request($request);
                syslog ('daemon|info', "$fax_id: http post finish");

                if($results->is_success && $results->content =~ /OK/)
                {
                        syslog ('daemon|info', "$fax_id: fax delivered
correctly");
                        syslog ('daemon|info', "$fax_id: file: $pdf");
                        unlink $pdf;
                        exit 0;
                }
                else
                {
                        syslog ('daemon|info', "$fax_id: failure to http post");
                        syslog ('daemon|info', "$fax_id: file: $pdf");
                        unlink $pdf;
                        exit 75;
                }
        }
        else
        {
                syslog ('daemon|info', "$fax_id: file size < 0 KB's!");
                syslog ('daemon|info', "$fax_id: don't work!");
                exit 75;
        }
}
else
{
        syslog ('daemon|info', "$fax_id: no file found!");
        syslog ('daemon|info', "$fax_id: don't work!");
        exit 75;
}



ps aux

/usr/bin/perl -w /usr/local/sbin/http http.Zuk1Hu http://dir_web
/var/spool/hylafax/recvq/fax000003119.tif 0987654 1234560


No se supone que la línea "syslog ('daemon|info', "$fax_id: Checking
file");" debería de ser la primera con salida en ejecutarse y aunque
el proceso se quede en espera de una respuesta http, esa estar en
syslog. Yo creo que se "bloquea" antes, pero no se el por que, ni
como.

Gracias desde ya.

-- 
Un saludo,
Javier.


Reply to: