Deployer S SH bash не загружает файлы профиля - PullRequest
0 голосов
/ 06 апреля 2020

Я использую Deployer до S SH на сервере и запускаю несколько сценариев для развертывания. Я не знаю внутренних деталей того, как Deployer выполняет s sh.

Проблема в том, что он имеет только фрагмент $PATH, что означает, что двоичный файл, необходимый для развертывания, не найден. Я попытался добавить новую тестовую переменную $FOO во все файлы, которые я могу вспомнить , чтобы увидеть, какой из них загружается:

  • ~/.bash_profile
  • ~/.bashrc
  • ~/.profile
  • /etc/profile
  • /etc/bash.bashrc

с:

...


export FOO="etcprofile"

но Ни один из них не работает, так как значение $FOO пусто при запуске Deployer.

Я также проверил флаги и команду в Deployer, и, кажется, нет ничего необычного:

deploy. php

task('debug:print', function () use($stage) {
    run('echo $PATH');
    run('echo $SHELL');
    run('export');
    dump($stage->getShellCommand());
    dump($stage->getSshArguments());
    exit("DONE");
});

output

falnyr@local:/Projects/deployer-app $ dep deploy stage-server -vvv
➤ Executing task debug:print
[stage-server] > echo $PATH
[stage-server] < ssh multiplexing initialization
[stage-server] < Linux stage-server xxx x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

[stage-server] < /usr/local/bin:/usr/bin:/bin:/usr/games
[stage-server] > echo $SHELL
[stage-server] < /bin/bash
[stage-server] > export
[stage-server] < declare -x HOME="/home/admin"
[stage-server] < declare -x LANG="en_US.UTF-8"
[stage-server] < declare -x LC_CTYPE="en_NZ.UTF-8"
[stage-server] < declare -x LOGNAME="admin"
[stage-server] < declare -x MAIL="/var/mail/admin"
[stage-server] < declare -x OLDPWD
[stage-server] < declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
[stage-server] < declare -x PWD="/home/admin"
[stage-server] < declare -x SHELL="/bin/bash"
[stage-server] < declare -x SHLVL="2"
[stage-server] < declare -x SSH_CLIENT="xxx.xxx.xxx.xxx 62738 22"
[stage-server] < declare -x SSH_CONNECTION="xxx.xxx.xxx.xxx 62738 xxx.xxx.xxx.xxx 22"
[stage-server] < declare -x USER="admin"
[stage-server] < declare -x XDG_RUNTIME_DIR="/run/user/1000"
[stage-server] < declare -x XDG_SESSION_ID="xxxxxx"
[stage-server] < declare -x _="/bin/bash"
"bash -s"
Deployer\Ssh\Arguments {#166
  -flags: []
  -options: []
}
DONE

У меня также есть другой сервер с аналогичной конфигурацией, которая выглядит работать хорошо. Я не уверен, что искать, чтобы определить разницу в конфигурации.

1 Ответ

0 голосов
/ 06 апреля 2020

Скрипты не являются источником вашего профиля, если только их шебанг не похож на #!/bin/bash -i или они не содержат строку, например . $HOME/.profile, над строками, которые будут использовать ваши переменные.

Не ожидайте, что псевдонимы сработают. Функции лучше.

Последняя мысль: запуск сценариев оболочки с веб-сервера довольно рискован. Это то же самое, что делать системные вызовы; есть риск, что кто-то может манипулировать им, чтобы получить оболочку, а затем потерпеть крушение havo c в вашей системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...