Ubah pengguna dan muat seluruh lingkungan dalam skrip shell

9

Saya mengalami beberapa masalah dengan skrip pemula kami yang mengubah pengguna dan memulai beberapa proses daemon ruby.

Di masa lalu saya hanya akan bash -c "do the business" -l someusermemastikan untuk menggunakan -lbendera untuk meniru login.

Ini telah bekerja dengan baik sampai sekarang, proses ruby ​​kami telah melempar kesalahan berikut: require: no such file to load -- rubygems (LoadError)setelah beberapa penyelidikan saya menemukan kesalahan ini hanya terjadi ketika saya menjalankan skrip sebagai pengguna root, yaitu (ketika saya sudo suatau ketika sedang dijalankan oleh pemula).

Saya pikir ini adalah masalah PATH ketika saya secara manual mengatur path terlebih dahulu untuk menyelesaikan masalah.

Apakah ada cara untuk mengubah pengguna dan memuat seluruh lingkungan?

Saya juga sudah mencoba su user -cdan sudo.


Untuk membuatnya lebih mudah untuk menguji saya "rooting up" ( sudo su) dan berjalan which bundle(bundel adalah hal yang ruby).

Inilah yang saya dapatkan:

  • sudo -i -u webuser which bundle # => tidak ada output
  • su -l webuser -c which bundle # => tidak ada output
  • sudo su - webuser -c which bundle # => tidak ada output

Tapi dia masuk sebagai pengguna web

  • which bundle # => / opt / ruby ​​/ bin / bundle
Daniel Upton
sumber
1
Sudahkah Anda mencoba su - user -c?
Karlson
Distribusi apa itu?
artistoex
Apakah skrip Anda bergantung pada modul ruby ​​yang dipasang per pengguna?
Keith
@artistoex itu ubuntu :)
Daniel Upton
1
Saya akan memastikan itu benar-benar masalah PATH (membuang variabel dalam skrip). Kemudian bandingkan PATH dan lihat /etc/profile ~/.bash_profile ~/.bash_logindan ~/.profile. Untuk shell login, bash mengevaluasi ini dalam urutan yang diberikan.
artistoex

Jawaban:

10

Menggunakan sudo su - user -cakan membuatnya seolah-olah Anda masuk sebagai orang yang mewarisi jalan mereka. Itu sebabnya su userberbeda su - user.

Namun jika Anda menetapkan path dalam .bashrcfile, itu hanya akan berlaku untuk sesi interaktif (yaitu ssh-ing sebagai pengguna itu).

Anda sebaiknya menggunakan .bash_profileatau /etc/profile, lihat ini .

Nate
sumber
3
Anda harus mencatat itu su -dan su -lidentik.
jordanm
3
dan mungkin harus merekomendasikan --loginagar mudah dibaca.
3

Untuk konteks login, gunakan:

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