запуск сценариев bash в php

У меня два компьютера. На первом компьютере у меня работает 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 до завершения скрипта.

Related of "запуск сценариев bash в php"

Несколько советов:

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

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

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

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

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

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

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

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