запуск скриптов bash в php - PullRequest
1 голос
/ 29 марта 2010

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

так я звоню:

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, пока скрипт не будет завершен.

Ответы [ 3 ]

3 голосов
/ 29 марта 2010

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

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

  2. Убедитесь, что пользователь apache / PHP, под которым запущен, правильно настроен на ssh для другой машины без запроса пароля. Очевидно, что если SSH запрашивает пароль, его некому набрать, поэтому, похоже, он ничего не сделал.

  3. Попробуйте также перенаправить выходы - ssh othermachine temp.bash >/dev/null 2>&1 &

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

1 голос
/ 29 марта 2010

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

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

0 голосов
/ 29 марта 2010

Вы можете использовать задания cron (по расписанию). Задание Cron периодически извлекает данные с помощью вашего bash-скрипта.

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

...