Назад | Перейти на главную страницу

Использование «at» для вызова отложенного процесса из сценария cgi

Вот загадка, с которой, надеюсь, ты мне поможешь. Клиент хочет отправить приветственное письмо ровно через 47 минут после загрузки документа через скрипт cgi. Я написал процедуру для отправки письма, а затем попытался использовать команду Linux «at» для ее выполнения.

Когда это не сработало, я настроил следующий тест в каталоге / cgi-bin.


************ Суть в том, что команда "at" не будет работать при вызове из apache. Есть ли способ обойти это?


Спасибо,

Роб Янг


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

Укажите полный путь к at в сценарии. Не говоря уже о вашем it_ran.txt файл. Откуда вообще знать, где этот файл должен храниться? Вероятно, он пытается записаться в корневой каталог и терпит неудачу.

Вы должны использовать проверка ошибок. Проверьте код результата системной команды или у себя.

Программы и вызовы возвращают ошибки, чтобы помочь вам надлежащим образом обрабатывать исключения.