다른 사용자로 어떻게 실행하나요?

다른 사용자로 어떻게 실행하나요?

이것이 실행되어야 하는 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 $PATHopenproject로 로그인한 후 실행 하면 출력은 다음과 같습니다./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

관련 정보