Alterar usuário e carregar todo o ambiente no shell script

9

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 someusercertificava-me de usar a -lbandeira 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 suou 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 -ce sudo.


Para facilitar o teste, eu estou " sudo surodando " ( ) e executando which bundle(o pacote é uma coisa de rubi).

Aqui está o que eu recebo:

  • sudo -i -u webuser which bundle # => sem saída
  • su -l webuser -c which bundle # => sem saída
  • sudo su - webuser -c which bundle # => sem saída

Mas ssh'd como usuário da web

  • which bundle # => / opt / ruby ​​/ bin / pacote
Daniel Upton
fonte
1
Você já tentou su - user -c?
Karlson
Que distribuição é essa?
Artistoex
Seu script depende dos módulos ruby ​​instalados por usuário?
Keith
@artistoex-lo do ubuntu :)
Daniel Upton
1
Eu teria certeza de que é realmente um problema PATH (despeje a variável no script). Em seguida, compare os CAMINHOS e veja /etc/profile ~/.bash_profile ~/.bash_logine ~/.profile. Para shells de login, o bash os avalia na ordem especificada.
Artistoex

Respostas:

10

O uso sudo su - user -cfará com que você faça login como a pessoa que herda o caminho. É por isso que su useré diferente su - user.

No entanto, se você estiver definindo o caminho em um .bashrcarquivo, ele só terá efeito para sessões interativas (ou seja, fazer o ssh como o usuário).

Você deveria usar .bash_profileou /etc/profile, veja isso .

Nate
fonte
3
Você deve observar isso su -e su -lé sinônimo.
Jordanm #
3
e provavelmente deve recomendar --logina legibilidade.
3

Para o contexto de login, use:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
H.-Dirk Schmitt
fonte