Altera o usuário e carrega o ambiente inteiro no shell script

8

Estou tendo alguns problemas com um nosso script inicial que muda o usuário e inicia alguns processos do daemon do ruby.

No passado, eu simplesmente bash -c "do the business" -l someuser estava certo de usar o sinalizador -l para emular um login.

Isso funcionou muito bem até agora, nosso processo ruby está lançando o seguinte erro: require: no such file to load -- rubygems (LoadError) após alguma investigação Descobri que esse erro ocorre apenas quando eu executo o script como usuário root, ou seja, quando eu sudo su ou quando está sendo executado por upstart).

Acho que isso é um problema no PATH, pois quando eu defino o caminho manualmente primeiro, ele resolve o problema.

Existe uma maneira de alterar o usuário e carregar o ambiente inteiro ?

Eu também tentei su user -c e sudo .

Para facilitar o teste, estou "fazendo o root" ( sudo su ) e executando which bundle (o pacote é uma coisa ruby).

Veja 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 em como webuser

  • which bundle # = > / opt / ruby / bin / bundle
por Daniel Upton 19.09.2012 / 18:58

2 respostas

6

Usar sudo su - user -c fará com que você faça login como a pessoa que herda o caminho deles. É por isso que su user é diferente de su - user .

No entanto, se você estiver configurando o caminho em um arquivo .bashrc , ele entrará em vigor apenas para sessões interativas (ou seja, ssh-ing como esse usuário).

Você deve usar .bash_profile ou /etc/profile , consulte isso .

    
por 19.09.2012 / 19:16
3

Para o contexto de login, use:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
por 19.09.2012 / 19:15