web-dev-qa-db-fra.com

Comment puis-je exécuter en tant qu'un autre utilisateur?

Il s'agit du code bash qui doit être exécuté. Donc, il remplace d'abord l'utilisateur par openproject et exécute ensuite tout le code:

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

J'ai essayé de chnaging le script ci-dessus dans ceci:

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"

mais cela ne fonctionne pas correctement et à chaque étape demande un mot de passe. Comment améliorer le script traduit pour qu'il fonctionne?

MISE À JOUR 1:

Après avoir reçu des suggestions à ce sujet, je suis au point où le code a été modifié en:

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

La sortie est correcte jusqu'à la ligne qui l'indique dans le code. De là, j'obtiens 4 erreurs

Sudo: bundle: commande introuvable

MISE À JOUR 2:

Après avoir essayé la suggestion de Dmitry Vasilyanov, j'ai constaté que si j'insère le -i, il simulera la connexion utilisateur. Cependant, ce n'est pas la dernière façon de le faire.

Si je lance echo $PATH après s'être connecté en tant que projet ouvert, la sortie est /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin

Si je lance echo $PATH après su openproject -c "bash -l" la sortie est /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

20
codiac

Pourquoi ne créez-vous pas un script Shell et ne

su - openproject -c "your_Shell_script"

Soyez conscient du - avant openproject. Cela définira les variables d'environnement de openproject au lieu de vos variables d'environnement utilisateur.

19
YoMismo

Si vous utilisez bash, vous pouvez le faire ici-doc

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

De cette façon, vous pouvez exécuter de nombreuses commandes et conserver l'état dans un script.

La même chose avec Sudo

Sudo -u user bash <<EOF
your
script
here
EOF
8
spinus