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 cours echo $PATH
après m'ê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 cours echo $PATH
après su openproject -c "bash -l"
la sortie/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
sudo
passu
.cd
, car il s'agit d'un shell intégré.sudo
est utilisé pour s'exécuter en tant qu'autre utilisateur, étantroot
la valeur par défaut si rien n'est spécifié, vous pouvez parfaitement l'exécutersudo -u openproject bundle install
.bundle: command not found
erreur parce que vous définissezPATH
ouGEM_PATH
dans votre.bash_profile
ou.bashrc
, ils ne sont pas exécutés dans des shells non connectés / non interactifs, vous devez donc passer-i
àsudo
pour simuler la connexion, comme ceci:sudo -iu openproject bundle install
Réponses:
Pourquoi ne pas créer un script shell et faire un
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.
la source
sudo
au début sinon il m'a demandé mon mot de passe.sudo
demandera également le mot de passe la première fois que vous l'exécuterez, d'où le conseil de mettre vos trucs dans un script shell et de l'exécuter avecsu
ousudo
Si vous utilisez bash, vous pouvez le faire ici-doc
De cette façon, vous pouvez exécuter de nombreuses commandes et conserver l'état dans un script.
La même chose avec sudo
la source