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 someuser
memastikan untuk menggunakan -l
bendera 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 su
atau 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 -c
dan 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 outputsu -l webuser -c which bundle
# => tidak ada outputsudo su - webuser -c which bundle
# => tidak ada output
Tapi dia masuk sebagai pengguna web
which bundle
# => / opt / ruby / bin / bundle
sumber
su - user -c
?/etc/profile
~/.bash_profile
~/.bash_login
dan~/.profile
. Untuk shell login, bash mengevaluasi ini dalam urutan yang diberikan.Jawaban:
Menggunakan
sudo su - user -c
akan membuatnya seolah-olah Anda masuk sebagai orang yang mewarisi jalan mereka. Itu sebabnyasu user
berbedasu - user
.Namun jika Anda menetapkan path dalam
.bashrc
file, itu hanya akan berlaku untuk sesi interaktif (yaitu ssh-ing sebagai pengguna itu).Anda sebaiknya menggunakan
.bash_profile
atau/etc/profile
, lihat ini .sumber
su -
dansu -l
identik.--login
agar mudah dibaca.Untuk konteks login, gunakan:
sudo -i -u USER COMMAND
su -l USER -c COMMAND
sumber