Позвольте мне предвосхитить мой вопрос, сказав, что я ПРОЧИТАЛ множество различных постов по SO, а также по поиску в Интернете и не смог найти ничего, что соответствовало бы моей конкретной ситуации.
Проблема довольно проста, на самом деле,У меня есть CGI-скрипт (Perl), обслуживающий динамические страницы на веб-сервере, и когда пользователь загружает определенную страницу, я хочу, чтобы CGI-скрипт вызывал файл .pl, используя system()
, чтобы выполнить некоторую «домашнюю работу». Это выполняется в среде Windows NT.
Сценарий CGI для целей тестирования: test1.pl или test1.cgi , например "https://www.awebsite.com/test1.pl".
test1.pl (сценарий cgi, который генерирует веб-страницы)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello user, this is a test page.";
system("start C:/path/to/script/test2.pl");
print "Page is fully loaded and housekeeping is being done, even though this page is now fully loaded";
test2.pl (отдельный файл .pl, выполняющий «ведение домашнего хозяйства»,асинхронно с тем, что делает test1.pl)
#!/usr/bin/perl
#just a counter that takes a while to complete, to verify test2.pl is running
for ($x=0; $x <= 100000; $x++){print "$x ";}
Хорошо, имейте в виду, что это для операций тестирования, а не функциональности. При запуске test1.pl из командной строки, он работает нормально.
При запуске test1.pl из браузера появляется сообщение «openWith.exe» на сервере (отображается в диспетчере задач). Мои файлы .pl являются исполняемыми, поэтому речь идет не о неизвестном типе файла или незнаниизапустить с интерпретатором командной строки Perl. Я не могу понять, что здесь происходит и почему он не будет запускать системную команду из test1.pl при вызове через веб-интерфейс.
НЕТ параметров, передаваемых из пользовательского ввода. test1.pl просто нужно запустить test2.plсделать некоторую домашнюю работу, но у меня не может быть test1.pl, ожидающего завершения test2.pl, прежде чем продолжить. Итак, test2.pl должен быть запущен test1.pl и продолжать работу - тем временем test1.pl уже завершил свою работу. Я не нуждаюсь или хочу захватить любой вывод из test2.pl.
Надеюсь, я объяснил это ясно. Я использовал простые примеры, хотя сам код будет намного сложнее. На данный момент эти простые примеры сценариев даже не выполняются, поэтому действующий код в настоящее время не важен.
Спасибо всем, кто может мне помочь. Кстати, я попытался установить разрешения «полный контроль» для test1.pl, и это не помогло. Опять же, этот "openwith.exe" действительно заставляет меня замолчать.