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
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.
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