управление PHP-скриптами CLI из веб-интерфейса - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть приложение, в котором есть действие dumper, которое непрерывно извлекает поток XML из веб-службы, анализирует его и затем выгружает его в базу данных mysql.

В данный момент я выполняю все действия по дампингу в пользовательском интерфейсе, и мне очень тяжело и сбрасывать данные, и манипулировать ими.

Итак, я создал отдельный CLI-скрипт, который позаботится о действии дампа, и интерфейс может просто опрашивать БД каждую секунду, чтобы увидеть, есть ли у нее новые данные, что будет гораздо более тривиальным способом сделать это. Но единственная проблема сейчас в том, что я не могу управлять сценарием cli из веб-интерфейса.

То есть я хочу иметь возможность запустить действие дампа и остановить его из пользовательского интерфейса. Я попробовал этот метод, который я видел где-то до

while(true) {
if(file_exist($file)) {
//do action 
} else { 
break;
}
}

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

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Поскольку у сценария уже есть доступ к базе данных, почему бы вам не создать контрольную таблицу для сценария CLI, содержащую действия, которые он должен выполнять?Вы извлекаете запись из таблицы каждый раз, когда скрипт зацикливается.

Вы сможете исправить это одной строкой (возможно, у вас уже есть таблица настроек, которую вы можете (ab) использовать), содержащаяединая командаЕсли это 1 или «выполнить» или «истина» или что-то еще, ваш сценарий продолжается, в противном случае он останавливается.

Затем из веб-интерфейса вы можете «отправить» команды, которые будут сохранены в указанномстол.

0 голосов
/ 02 сентября 2011

Использование exec - это простой способ «контролировать» ваш CLI-скрипт, однако это представляет угрозу безопасности, и я бы не рекомендовал его, если ваши сценарии не находятся на внутреннем сервере.Вместо того, что я рекомендую вам создать своего рода скрипт-демон (я рекомендую это, но это может быть немного сложнее реализовать) или периодически запускать ваш CLI-скрипт через cron (запланированные задачи в окне).Может быть, раз в 3 минуты.Веб-интерфейс и CLI-скрипт «общаются» друг с другом с помощью БД.Например.Веб-интерфейс публикует данные, которые должен обрабатывать сценарий CLI, а сценарий CLI публикует их после завершения.При таком подходе могут возникнуть проблемы с параллелизмом, но это действительно не будет проблемой, если приложение не велико, то есть тысячи запросов / сек.

0 голосов
/ 02 сентября 2011

до тех пор, пока вы не хотите использовать kill http://linux.about.com/library/cmd/blcmdl_kill.htm, чтобы жестоко убить или отправить сообщение запущенному сценарию, большинство методов используют аналогичный способ отправки данных.

Вы можете использовать специальную запись или таблицу базы данных для отправки / получения команд и сообщений между сценариями, или специальный файл в вашей файловой системе, или в общей памяти ... и т. Д.Все они включают асинхронный метод передачи сообщений.Возможно, вам лучше спроектировать свой сценарий так, чтобы он потреблял как можно меньше ресурсов, поэтому вам даже не придется его убивать.

Метод, который вы используете (с файлом), на самом деле довольно прост и надежен, но егоотправка сообщений только в одну сторону и только 1 тип сообщения.

...