2010-03-29 2 views
1

У меня два компьютера. На первом компьютере у меня работает apache со всем моим веб-кодом. На втором компьютере у меня есть большое количество данных, хранящихся с помощью сценария поиска (для выполнения сценария обычно требуется несколько часов). Я фактически создаю веб-интерфейс для доступа к этим данным без какой-либо задержки.running bash scripts in php

так я называю:

exec("bash initial.bash");

это скрипт драйвер, который находится в моей папке Apache. Он вызывает сценарий на другом компьютере. : ssh otherMachine temp.bash&

Этот скрипт вызывает сценарий поиска данных на втором компьютере.

Если я вызываю initial.bash в терминале, все работает плавно и успешно, но если я его назову в своем PHP-файле, то все мои команды запускаются в initial.bash, за исключением ssh otherMachine temp.bash&. Я положил & в конце этого, так что temp.bash будет работать в фоновом режиме, так как это займет несколько часов.

Я не уверен, почему вложенный скрипт не запущен при вызове Apache. Есть ли более эффективная альтернатива, чем использование exec или shell_exec для вызова сценария, который в конечном итоге вызывает другой скрипт. Причина, по которой я не вызываю сценарий на втором компьютере, - это время, которое требуется для запуска программы. Shell_exec не отображает страницу php до завершения скрипта.

ответ

1

Я предполагаю, что SSH не нравится пользователь php работает под? Вы говорите, что он отлично работает с терминалом - вы вошли в систему как один и тот же пользователь php?

Вы также можете найти очередью сообщений какого-то лучшего решения.

0

Работы cron (по расписанию) вы можете использовать. Cron задает данные периодически, используя ваш скрипт bash.

Дополнительно попробуйте выполнить exec ("/ bin/bash /path/to/script.sh"); Возможно, php не находит путь bash. Для дополнительной информации вам нужно посмотреть журналы apache.

3

Пара предложений:

  1. Попробуйте поставить полный путь к SSH (/usr/bin/ssh или там, где он установлен, а не просто ssh)

  2. Убедитесь, что пользователь Apache/PHP работает под установлен правильно доставить ssh в другую машину без запроса пароля. Очевидно, что если SSH запрашивает пароль, его там не будет, поэтому он просто ничего не сделает.

  3. Try перенаправлять выходы, а - ssh othermachine temp.bash >/dev/null 2>&1 &

  4. Попробуйте различные флаги SSH. Как -n, который специально предназначен для запуска команды по ssh в фоновом режиме.

+0

+1 Все замечательные предложения. –