Использование "at" для вызова отложенного процесса из скрипта cgi
Вот загадка, с которой, я надеюсь, вы сможете мне помочь. Клиент хочет отправить приветственное письмо ровно через 47 минут после загрузки документа с помощью скрипта cgi. Я написал подпрограмму для отправки письма, а затем попытался использовать команду Linux "at" для ее выполнения.
Когда это не сработало, я настроил следующий тест в каталоге / cgi-bin.
************ Суть в том, что команда at не будет работать при вызове apache. Есть ли способ обойти это?
Спасибо,
Роб Янг
ИСПЫТАТЕЛЬНЫЕ ФАЙЛЫ -------------------------------------------------- ------------------------- $> кошка test1.pl #!/ USR / бен / Perl # ЭТО ИСПЫТАНИЕ КОМАНДЫ LINUX "at", КОГДА ВЫЗЫВАЕМЫЕ ВНУТРИ APACHE print "Content-type: text/html\n\n"; my @lt= местное время (время ()+60); my $cmd="echo '/path/to/test2.pl' | at $lt[2]:$lt[1]"; печать $cmd; система ($ CMD); $> кошка test2.pl #!/ USR / бен / Perl my $cmd="echo 'it run!'>it_ran.txt"; система ($ CMD); КОМАНДНАЯ ЛИНИЯ ДЕМОНСТРАЦИЯ ------------------------------------------------------------------ $> rm it_ran.txt rm: не может удалить `it_ran.txt': нет такого файла или каталога $> ./test1.pl Тип контента: текст / html echo '/path/to/test2.pl' | в 20:28доб 55 в 2011-08-15 20:28 $> atq 55 2011-08-15 20:28 ryoung $> дата Пн Авг 15 20:27:11 CDT 2011 $> cat it_rat.txt cat: it_rat.txt: нет такого файла или каталога $> дата Пн Авг 15 20:28:01 CDT 2011 $> cat it_ran.txt это бежало! APACHE ДЕМОНСТРАЦИЯ -------------------------------------------------- ---------------------------------------- Затем я вызываю тот же сценарий, перейдя по ссылке http://www.MYSERVER.com/cgi-bin/test1.pl. [вывод браузера: echo '/path/to/test2.pl' | в 20:30 ] $> дата Пн 15 авг 20:30:40 CDT 2011 $> cat it_ran.txt cat: it_ran.txt: нет такого файла или каталога
1 ответ
Укажите полный путь к at
в сценарии. Не говоря уже о вашем it_ran.txt
файл. Как вы можете понять, где этот файл должен храниться? Вероятно, он пытается записаться в корневой каталог и не работает.
Вы должны использовать проверку ошибок. Проверьте код результата системной команды или у себя.
Программы и вызовы возвращают ошибки, чтобы помочь вам правильно обрабатывать исключения.