Estou tendo alguns problemas com um script inicial que altera o usuário e inicia alguns processos do daemon de ruby.
No passado, eu simplesmente bash -c "do the business" -l someuser
certificava-me de usar a -l
bandeira para emular um login.
Isso funcionou muito bem até agora, nosso processo ruby gerou o seguinte erro: require: no such file to load -- rubygems (LoadError)
após alguma investigação, encontrei esse erro apenas quando executo o script como usuário root, ou seja (quando eu sudo su
ou quando estou sendo executado pelo iniciante).
Acho que esse é um problema do PATH, pois quando eu defino manualmente o caminho, ele resolve o problema.
Existe uma maneira de mudar de usuário e carregar todo o ambiente?
Eu também tentei su user -c
e sudo
.
Para facilitar o teste, eu estou " sudo su
rodando " ( ) e executando which bundle
(o pacote é uma coisa de rubi).
Aqui está o que eu recebo:
sudo -i -u webuser which bundle
# => sem saídasu -l webuser -c which bundle
# => sem saídasudo su - webuser -c which bundle
# => sem saída
Mas ssh'd como usuário da web
which bundle
# => / opt / ruby / bin / pacote
fonte
su - user -c
?/etc/profile
~/.bash_profile
~/.bash_login
e~/.profile
. Para shells de login, o bash os avalia na ordem especificada.Respostas:
O uso
sudo su - user -c
fará com que você faça login como a pessoa que herda o caminho. É por isso quesu user
é diferentesu - user
.No entanto, se você estiver definindo o caminho em um
.bashrc
arquivo, ele só terá efeito para sessões interativas (ou seja, fazer o ssh como o usuário).Você deveria usar
.bash_profile
ou/etc/profile
, veja isso .fonte
su -
esu -l
é sinônimo.--login
a legibilidade.Para o contexto de login, use:
sudo -i -u USER COMMAND
su -l USER -c COMMAND
fonte