Как общаться с демоном python из скриптов PHP - PullRequest
1 голос
/ 16 декабря 2011

Я делаю сервер сканирования для своей компании, который будет использоваться для запуска сканирования с помощью таких инструментов, как nessus, nmap, nikto и т. Д. Я написал страницы на PHP, но мне нужно контролировать последующиепроцессы (порожденные nohup и фоновые с &), поскольку мне нужно выполнять различные действия после завершения сканирования (например, отправлять их по электронной почте, загружать отчеты с сервера nessus и т. д.).

Здесь мне посоветовали создать демона python, с которым общались страницы PHP.Я бесконечно гуглял, но не могу найти ничего, что объясняло бы логику общения с точки зрения новичка (кодирование демона будет моим самым продвинутым проектом на данный момент).Например, мне известны доменные сокеты IPC и unix, но я не уверен, как их использовать в моей ситуации.Таким образом, я после некоторых советов или указаний относительно того, что я должен делать.

Я думал, что смогу создать скрипт на python с циклом while, который постоянно проверяет, завершился ли процесс, и когда это происходит, выполняет соответствующее действие после завершения процесса.Сценарий будет демонизирован, поэтому он будет работать в фоновом режиме, и я буду вызывать его со страниц PHP с параметром PID, к которому я могу получить доступ, например, с помощью модуля argparse.

Я на правильном пути с точки зрения логики - или есть лучшие решения?

Любая помощь, или просто что-то для Google, высоко ценится!Спасибо

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Я думаю, что-то вроде gearman , безусловно, облегчит реализацию этого.

Gearman - это сервер заданий, который позволяет запускать задания, запрашивать, выполняется ли задание, и извлекатьвывод задания (в виде текста).

Он поддерживает PHP и Python (среди прочих).

(Этот ответ заставил меня почувствовать себя продавцом).

1 голос
/ 16 декабря 2011

Итак, ваш план: PHP порождает nmap и сторожевой таймер. Watchdog продолжает опрос для завершения работы nmap, а затем выполняет некоторую постобработку после завершения.

Немного чище будет: PHP порождает «менеджера процессов» (который вы также пишете). Этот менеджер процессов в основном представляет собой программу, которая выполняет nmap в дочернем процессе, ожидает завершения этого дочернего процесса (используя системный вызов wait), который, например, в C выглядит так: http://linux.die.net/man/2/wait), и выполняет постобработку .

Это также будет более эффективным, потому что «ожидание», вероятно, будет дешевле, чем повторная проверка, завершен ли PID.

Если вам нравится python больше, чем C, python также имеет управление подпроцессами: http://docs.python.org/library/subprocess.html

...