이것이 실행되어야 하는 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: 번들: 명령을 찾을 수 없습니다
업데이트 2:
Dmitry Vasilyanov의 제안을 시도한 후 -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
답변1
쉘 스크립트를 작성하고 실행해 보는 것은 어떨까요?
su - openproject -c "your_shell_script"
openproject 전에 -를 참고하십시오. 그러면 사용자 환경 변수 대신 openproject의 환경 변수가 설정됩니다.
답변2
Bash를 사용한다면 여기서 할 수 있습니다 -doc
$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF
이렇게 하면 많은 명령을 실행하고 상태를 스크립트에 저장할 수 있습니다.
sudo와 동일
sudo -u user bash <<EOF
your
script
here
EOF