Как выполнить действие после завершения процесса, когда запущено несколько процессов - PullRequest
1 голос
/ 14 декабря 2011

Я делаю сервер сканирования для своей компании, который будет использоваться для запуска сканирования с помощью таких инструментов, как nessus, nmap, nikto и т. Д. Я написал страницы в php, поэтому, как только сканирование запущено, оно становитсяобрабатывает и возвращает PID.Часть спецификации проекта заключается в том, что после завершения сканирования результаты отправляются соответствующему консультанту по электронной почте.Здесь я ищу некоторые идеи, потому что я не знаю, как это сделать.

Могу ли я сделать так, чтобы скрипт php передавал PID экземплярам скрипта python (мой основной язык), который постоянно проверял, например, завершился ли процесс?Я попытался поместить этот цикл проверки процесса на страницу PHP, но, очевидно, это заставляет страницу PHP приостанавливаться, пока она ожидает завершения сканирования, что, к сожалению, не работает для меня, так как будет выполняться многократное сканирование.

Или мне лучше создать базу данных, в которой хранится информация о состоянии процесса?У меня нет опыта работы с базами данных, но сейчас самое время учиться.

Есть предложения?Даже некоторые идеи, которые я могу гуглить, будут высоко оценены!

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Полагаю, вы запускаете процессы примерно так:

exec("/path/to/file > /dev/null 2>&1 &");

... в этом случае вы можете просто поставить другой скрипт посередине:

exec("/path/to/file | php /some/php/script.php > /dev/null 2>&1 &");

Затем, в script.php (или, если хотите, в python), вы можете сделать что-то вроде этого:

while (!feof(STDIN)) {
  sleep(1); // ...or something less horrible that also avoids racing
}

// When you get here, the process has finished
2 голосов
/ 14 декабря 2011

Когда я сталкиваюсь с такой проблемой, я обычно делаю Python-демон, который выполняет всю работу, и PHP просто отправляет сообщения этому Python-демону. Эти сообщения могут быть чем-то очень простым, например, набором файлов в каталоге, который постоянно проверяется, или регистрироваться в базе данных.

Насколько хорош этот смысл, зависит от масштаба вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...