Я пытаюсь запустить скрипт php на удаленном сервере, используя ansible.
Запуск сценария с пользователем ansible (который ansible использует для входа на сервер) работает отлично. Однако задание ansible не выполняется, если в моем php-скрипте есть операторы include.
Мой php скрипт лежит в
/ SRV / проект
он пытается включить
включает / someLibrary.php
Все отлично работает при запуске скрипта, как любой пользователь с правильными правами доступа, но при запуске его через задание с заданием
- имя: запустить скрипт shell: 'php /srv/project/script.php'
это терпит неудачу с:
не удалось открыть поток: нет такого файла или каталога в /srv/project/includes/someLibrary.php
Запуск очень простого сценария PHP работает хорошо, хотя.
Я только что нашел решение проблемы.
Проблема заключалась в том, что когда я выполнял сценарий вручную, я подключался к серверу и cd’d в /srv/project
каталог перед звонком php script.php
ПГПС include
в этом случае ищет в текущем каталоге файлы, которые я хочу включить. Когда ansible подключается к серверу, он не меняет каталог, создавая no such file or directory
ошибка. Решение этого простое, так как модуль оболочки принимает chdir
в качестве аргумента, чтобы изменить каталог на тот, который указан до запуска команды.
Моя задание теперь выглядит следующим образом:
- имя: запустить скрипт shell: 'php /srv/project/script.php' арг: chdir: '/ srv / project'
Спасибо всем за вашу помощь!
Ansible запускается в неинтерактивном ssh-сеансе и, следовательно, не применяет настройки среды пользователя (например, .bashrc, .bash_profile). Это, как правило, является причиной различного поведения при интерактивном и нет. Проверьте разницу между интерактивным printenv и raw: printenv
через Ansible, и вы, вероятно, найдете то, что нужно установить (через ANSIBLE Task / Play environment:
блок), чтобы заставить вещи работать.