これが実行されるべき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