Sto riscontrando dei problemi con uno dei nostri script upstart che cambia utente e avvia alcuni processi daemon ruby.
In passato mi sarei semplicemente bash -c "do the business" -l someuser
assicurato di usare la -l
bandiera per emulare un login.
Finora ha funzionato alla grande, il nostro processo ruby ha generato il seguente errore: require: no such file to load -- rubygems (LoadError)
dopo alcune indagini ho riscontrato che questo errore si verifica solo quando eseguo lo script come utente root, ovvero (quando io sudo su
o quando sono avviato da upstart).
Penso che questo sia un problema PATH in quanto quando imposto manualmente il percorso prima risolve il problema.
C'è un modo per cambiare utente e caricare l' intero ambiente?
Ho anche provato su user -c
e sudo
.
Per rendere più semplice il test, sto sudo su
eseguendo il "rooting up" ( ) ed eseguo which bundle
(bundle è una cosa ruby).
Ecco cosa ottengo:
sudo -i -u webuser which bundle
# => nessun outputsu -l webuser -c which bundle
# => nessun outputsudo su - webuser -c which bundle
# => nessun output
Ma è entrato come utente web
which bundle
# => / opt / ruby / bin / bundle
/etc/profile
~/.bash_profile
~/.bash_login
e ~/.profile
. Per le shell di login, bash le valuta nell'ordine indicato.
su - user -c
?