Это код bash, который должен быть запущен. Итак, сначала он заменяет пользователя на openproject, а затем запускает весь код:
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
Я попытался изменить приведенный выше сценарий на это:
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"
но это не работает должным образом и на каждом этапе запрашивает пароль. Как улучшить переведенный скрипт, чтобы он работал?
ОБНОВЛЕНИЕ 1:
После получения предположений об этом я перехожу к следующему коду:
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
Вывод в порядке до строки, которая так утверждает в коде. Оттуда я получаю 4 ошибки
Команда sudo: bundle: не найдена
ОБНОВЛЕНИЕ 2:
Попробовав предложение Дмитрия Васильянова, я обнаружил, что, если я вставлю -i, он будет симулироваться как логин пользователя. Однако это не последний способ сделать это.
Если я запускаюсь echo $PATH
после входа в систему как openproject, вывод/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Если я бегу echo $PATH
после su openproject -c "bash -l"
выхода/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
, нетsu
.cd
, поскольку это встроенная оболочка.sudo
используется для запуска от имени другого пользователя. Поroot
умолчанию, если ничего не указано, вы можете прекрасно выполнитьsudo -u openproject bundle install
.bundle: command not found
ошибке , потому что вы установилиPATH
илиGEM_PATH
в вашем.bash_profile
или.bashrc
они не выполняются без входа / неинтерактивный оболочек, поэтому вам нужно пройти ,-i
чтобыsudo
для имитации входа в систему , как это:sudo -iu openproject bundle install
Ответы:
Почему бы вам не создать сценарий оболочки и сделать
su - openproject -c "your_shell_script"
Будьте в курсе - до openproject. Это установит переменные окружения openproject вместо ваших переменных окружения пользователя.
источник
sudo
в начале, иначе он попросил у меня пароль.sudo
также будет запрашивать пароль в первый раз , когда вы запускаете его, следовательно , советование класть свои вещи в скрипт и работает , что либоsu
илиsudo
Если вы используете Bash, вы можете сделать здесь-док
Таким образом, вы можете выполнять много команд и сохранять состояние внутри скрипта.
То же самое с sudo
источник