У меня есть веб-приложение (nginx, gunicorn, Python), который получает сообщение мерзавца, сцепляет и инициировал инструмент командной строки (рубин, capistrano). Все выполняется через названного пользователя deployer
. Инструмент командной строки работает очень хорошо и может соединиться через ssh с удаленными серверами.
Когда веб-приложение инициировало его, это не может соединиться через ssh. Пароль требуется. Я думаю, что знаю, как обойти его (у меня была подобная проблема с cronjobs здесь: Сервер уничтожается из-за растущего числа процессов ssh-агента), но так или иначе пользователь пуст в webabb.
Учитывая этот сценарий:
#!/bin/bash
echo "$(whoami)"
Когда я работаю deployer@tools:/srv/deployment$ ./test > test.txt
затем test.txt содержит "устройство развертывания" и файл test.txt
принадлежит deployer:deployer.
Когда я выполняю ту же самую команду из своего веб-приложения затем, test.txt пуст (только содержащий разрыв строки), но принадлежавший deployer:www-данным (как ожидалось и настроенный в gunicorn).
Как это даже возможно и что я могу сделать об этом?
Таким образом, проблема оказалась другим урегулированием пути.
Гуникорн использовал питона virtualenv в качестве ПУТИ и поэтому не знал whoami вообще. Подталкивание в абсолютном пути работало!