別のユーザーとして実行するにはどうすればよいですか?


19

これは、実行する必要がある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:

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


あなたが欲しいsudo、ではないsu
dawud 14

またcd、シェルは組み込みであるため、(意味的に)sudoも使用できません。
MadHatterはモニカをサポートしています

しかし、sudoはルートの代わりになりませんか?私は根と私はopenprojectユーザーとしてログインして、2番目のコマンド(CD〜/ openproject)からスタートするかのように正確な効果で、openprojectユーザーとしてスクリプトを実行したい

1
いいえ、sudo別のユーザーとして実行するために使用されrootます。何も指定しない場合のデフォルトであるため、完全に実行できsudo -u openproject bundle installます。
dawud 14

私はあなたが取得していると思いbundle: command not foundますが設定されているためエラーがPATHまたはGEM_PATHあなたに.bash_profileまたは.bashrcあなたが合格する必要があるので、それらは、非ログイン/非対話型シェルで実行されていない-isudo:シミュレートログインにこのように、sudo -iu openproject bundle install
ドミトリーVasilyanov

回答:


19

シェルスクリプトを作成して

su - openproject -c "your_shell_script"

-openprojectの前に注意してください。これにより、ユーザー環境変数の代わりにopenprojectの環境変数が設定されます。


sudo最初に追加する必要がありました。追加しないと、パスワードを要求されました。
IanVaughan

sudoまた、最初に実行するときにパスワードを要求するため、シェルスクリプトに自分のものを入れて、suまたはsudo
-YoMismo

8

bashを使用する場合、here-docを実行できます

$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF

これにより、多くのコマンドを実行し、スクリプト内に状態を保持できます。

sudoでも同じ

sudo -u user bash <<EOF
your
script
here
EOF

どちらも機能しません。本当にコマンドを標準入力からsu / sudoに渡すことができますか?
スパラフーク

1
@Sparhawk、チェックしてくれてありがとう。2番目の例では、「bash」を追加するのを忘れました(既に例を更新しています)–動作します。最初の例はあなたが言ったように完全に機能していません、私は間違いを犯すことができるように長期キャッシュから入力していましたが、確かに私は標準入力で作業していました(そのタスクのサブプロセスを実行するためにJavaを使用していました)正しい方法を見つけるためにそれをさらにテストしてください。

さまざまな変数に依存するコマンドを作成し、別のユーザーとして実行する必要がありました。したがって、私の場合、YoMismoからの提案は選択肢ではありませんでした。私はこれを1時間戦いましたが、私が働いていると思うのはEOFアプローチだけです(2番目の例)。ありがとう!
ジェット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.