Usando “at” para chamar um processo atrasado de dentro de um script cgi

1

Aqui está um quebra-cabeça que espero que você possa me ajudar. Um cliente quer enviar uma carta de boas-vindas exatamente 47 minutos depois que um documento é carregado via script cgi. Eu escrevi uma rotina para enviar a carta e tentei usar o comando "at" do Linux para executá-la.

Quando isso não funcionou, configurei o seguinte teste no diretório / cgi-bin.

************ A linha inferior é: O comando "at" não funcionará quando chamado pelo apache. Existe alguma maneira de contornar isso?

Obrigado,

Rob Young


TEST FILES
---------------------------------------------------------------------------

$> cat test1.pl
#!/usr/bin/perl
#THIS IS A TEST OF THE "at" LINUX COMMAND WHEN CALLED FROM WITHIN APACHE
print "Content-type: text/html\n\n";
my @lt=localtime(time()+60);
my $cmd="echo '/path/to/test2.pl' | at $lt[2]:$lt[1]";
print $cmd;
system($cmd);

$> cat test2.pl
#!/usr/bin/perl
my $cmd="echo 'it ran!'>it_ran.txt";
system($cmd);




COMMAND LINE DEMONSTRATION
------------------------------------------------------------------
$> rm it_ran.txt
rm: cannot remove 'it_ran.txt': No such file or directory
$> ./test1.pl
Content-type: text/html

echo '/path/to/test2.pl' | at 20:28job 55 at 2011-08-15 20:28
$> atq
55      2011-08-15 20:28 a ryoung
$> date
Mon Aug 15 20:27:11 CDT 2011
$> cat it_rat.txt
cat: it_rat.txt: No such file or directory
$> date
Mon Aug 15 20:28:01 CDT 2011
$> cat it_ran.txt
it ran!


APACHE DEMONSTRATION
------------------------------------------------------------------------------------------
Then I call the same script by browsing to http://www.MYSERVER.com/cgi-bin/test1.pl
[browser output:
                  echo '/path/to/test2.pl' | at 20:30
]

$> date
Mon Aug 15 20:30:40 CDT 2011
$> cat it_ran.txt
cat: it_ran.txt: No such file or directory
    
por Rob Y 16.08.2011 / 03:53

1 resposta

4

Especifique o caminho completo para at no script. Sem mencionar o seu arquivo it_ran.txt . Como tem alguma idéia de onde esse arquivo deve ser depositado? Provavelmente está tentando ser escrito no diretório raiz e falhando.

Você deve usar a verificação de erros . Verifique o código do resultado do comando do sistema ou de si mesmo.

Programas e chamadas retornam erros para ajudá-lo a lidar com as exceções adequadamente.

    
por 16.08.2011 / 04:00

Tags