Başka bir kullanıcı olarak nasıl çalışabilirim?


20

Bu, çalıştırılması gereken bash kodudur. Bu yüzden önce kullanıcı openproject yerine geçer ve sonra tüm kodu çalıştırır:

su openproject -c "bash -l" 
cd ~/openproject
git checkout Gemfile.lock
git pull

bundle install
RAILS_ENV="production" bundle exec rake db:migrate
RAILS_ENV="production" bundle exec rake db:seed
RAILS_ENV="production" bundle exec rake assets:precompile

Bu yukarıdaki betiği chnaging denedim:

su - openproject -c "cd ~openproject/openproject"

su - openproject -c "git checkout stable"

su - openproject -c "git checkout Gemfile.lock"
su - openproject -c "git pull"

su - openproject -c "bundle install"

su - openproject -c "RAILS_ENV="production" bundle exec rake db:migrate"
su - openproject -c "RAILS_ENV="production" bundle exec rake db:seed"
su - openproject -c "RAILS_ENV="production" bundle exec rake assets:precompile"

ancak bu düzgün çalışmaz ve her adımda parola ister. Çevrilmiş komut dosyası çalışabilmesi için nasıl geliştirilebilir?

GÜNCELLEME 1:

Bu konuda öneriler aldıktan sonra kodun değiştirildiği nokta:

cd ~openproject/openproject

sudo -u openproject git checkout stable

sudo -u openproject git checkout Gemfile.lock
sudo -u openproject git pull

# the output is good thill here
sudo -u openproject bundle install

sudo -u openproject RAILS_ENV="production" bundle exec rake db:migrate
sudo -u openproject RAILS_ENV="production" bundle exec rake db:seed
sudo -u openproject RAILS_ENV="production" bundle exec rake assets:precompile

Çıktı, kodun içinde yazan satıra kadar tamam. Oradan 4 hata alıyorum

sudo: bundle: komut bulunamadı

GÜNCELLEME 2:

Dmitry Vasilyanov öneri denedikten sonra -i eklemek eğer kullanıcı giriş olarak simüle edeceğini buldum. Ancak bunu yapmanın son yolu bu değil.

echo $PATHOpenproject olarak giriş yaptıktan sonra çalıştırırsam çıkış/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin

Koşarsam echo $PATHsonra su openproject -c "bash -l"çıkışı/home/openproject/.rvm/gems/ruby-2.1.0/bin:/home/openproject/.rvm/gems/ruby-2.1.0@global/bin:/home/openproject/.rvm/rubies/ruby-2.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin


Sen istiyorsun sudo, değil su.
dawud

Ayrıca, cdbir kabuk yerleşimi olduğu için sudo yapamazsınız .
MadHatter

Ama sudo kök için alt sınır oluşturmuyor mu? Köküyüm ve openproject kullanıcısı olarak oturum açıp ikinci komuttan (cd ~ / openproject) başlayacak gibi tam efektlerle script'i openproject kullanıcısı olarak çalıştırmak istiyorum

1
Hayır, sudobaşka bir kullanıcı olarak çalıştırmak için kullanılır, roothiçbir şey belirtilmezse varsayılan olarak mükemmel bir şekilde çalıştırabilirsiniz sudo -u openproject bundle install.
dawud

bundle: command not foundAyarladığınız için PATHveya GEM_PATHsizin .bash_profileya da .bashrcgiriş yapmayan / etkileşimli olmayan kabuklarda yürütülmediği için hatayı alıyorsunuz sanırım , bu yüzden girişi simüle -ietmek sudoiçin bu şekilde geçmeniz gerekiyor :sudo -iu openproject bundle install
Dmitry Vasilyanov

Yanıtlar:


19

Neden bir kabuk betiği oluşturup bir

su - openproject -c "your_shell_script"

Açık projeden önce - farkında olun. Bu, kullanıcı ortam değişkenleriniz yerine openproject ortam değişkenlerini ayarlayacaktır.


sudoBaşlangıçta eklemem gerekiyordu, aksi takdirde şifremi istedi.
IanVaughan

sudoayrıca ilk kez çalıştırdığınızda şifreyi soracaktır, bu nedenle eşyalarınızı bir kabuk betiğine susudo
koymanız

8

Eğer bash kullanıyorsanız burada yapabilirsiniz-doc

$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF

Bu şekilde birçok komutu yürütebilir ve durumu bir betik içinde tutabilirsiniz.

Sudo ile aynı

sudo -u user bash <<EOF
your
script
here
EOF

İkisi de benim için çalışmıyor. Stdin'den su / sudo'ya gerçekten komutlar verebilir misiniz?
Sparhawk

1
@Sparhawk, kontrol için teşekkürler. İkinci örnekte "bash" eklemeyi unuttum (zaten örneği güncelledi) - çalışıyor. İlk örnek, bahsettiğiniz gibi tam olarak çalışmıyor, uzun vadeli önbellekten yazıyordum, bu yüzden bir hata yapabilirdim, ama kesinlikle stdin ile çalışıyorum (bu görev için alt süreci çalıştırmak için java kullanıyordum) doğru yolu bulmak için daha fazla test edin.
spinus

1
Çeşitli değişkenlere bağlı bir komut oluşturmak ve başka bir kullanıcı olarak çalıştırmak gerekiyordu. Benim durumumda YoMismo'nun önerisi bir seçenek değildi. Bunu bir saat boyunca mücadele ettim, işte bulduğum tek şey EOF yaklaşımı (ikinci örnek). Teşekkürler!
Jette
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.