У меня два компьютера. На первом компьютере у меня работает 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 до завершения скрипта.
Несколько советов:
Попробуйте поместить полный путь в ssh ( /usr/bin/ssh
или где он установлен, а не просто ssh
)
Убедитесь, что пользователь apache / PHP работает под правильной настройкой ssh на другую машину без запроса пароля. Очевидно, что если SSH запрашивает пароль, его там не будет, поэтому он просто ничего не сделает.
Попробуйте перенаправить выходы также – ssh othermachine temp.bash >/dev/null 2>&1 &
Попробуйте несколько разных флагов в ssh. Как -n
который специально предназначен для запуска команды по ssh в фоновом режиме.
Я предполагаю, что SSH не нравится, как работает php пользователя ? Вы говорите, что он отлично работает с терминалом – вы вошли в систему как один и тот же пользователь php?
Вы также можете найти очередность сообщений какого-то лучшего решения.
Вы можете использовать cron (запланированные) задания. Cron задает данные периодически, используя ваш скрипт bash.
Дополнительно попробуйте выполнить exec ("/ bin / bash /path/to/script.sh"); Возможно, php не находит путь bash. Для дополнительной информации вам нужно посмотреть журналы apache.