मैं किसी अन्य उपयोगकर्ता के रूप में कैसे चला सकता हूं?


20

यह बैश कोड है जिसे चलाया जाना चाहिए। इसलिए पहले यह उपयोगकर्ता को ओपनप्रोजेक्ट करने के लिए विकल्प देता है और सभी कोड चलाता है:

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:

दिमित्री वासिलीनोव के सुझाव की कोशिश करने के बाद मैंने पाया कि अगर मैं -i सम्मिलित करता हूं तो यह उपयोगकर्ता लॉगिन के रूप में अनुकरण करेगा। हालांकि यह ऐसा करने का अंतिम तरीका नहीं है।

अगर मैं echo $PATHओपनप्रूजेक्ट के रूप में लॉग इन करने के बाद भागता हूं, तो यह ouput है/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
दाऊद

तुम भी (सार्थक) sudo नहीं कर सकते cd, क्योंकि यह एक शेल बेसिन है।
मदहैटर

लेकिन sudo रूट के लिए सब्सक्राइब नहीं करता है? मैं जड़ हूं और स्क्रिप्ट को ओपनप्रोजेक्ट उपयोगकर्ता के रूप में चलाना चाहता हूं, सटीक प्रभावों के साथ जैसे कि मैं ओपनप्रोजेक्ट उपयोगकर्ता के रूप में लॉग इन करूंगा और दूसरे कमांड से शुरू करूंगा (सीडी ~ / ओपनप्रोजेक्ट)

1
नहीं, sudoकिसी अन्य उपयोगकर्ता के रूप में चलाने के लिए उपयोग किया जाता है, rootडिफ़ॉल्ट होने के नाते यदि कुछ भी निर्दिष्ट नहीं है, तो आप पूरी तरह से निष्पादित कर सकते हैं sudo -u openproject bundle install
दाऊद

मुझे लगता है कि आप हो रही है bundle: command not foundक्योंकि आपके द्वारा सेट त्रुटि PATHया GEM_PATHअपने में .bash_profileया .bashrc, वे, गैर लॉगिन / गैर-सहभागी गोले में मार डाला नहीं कर रहे हैं तो आप उत्तीर्ण करने की आवश्यकता -iकरने के लिए sudoअनुकरण लॉगिन करने के लिए, इस तरह:sudo -iu openproject bundle install
दिमित्री Vasilyanov

जवाबों:


19

आप एक शेल स्क्रिप्ट क्यों नहीं बनाते हैं और क्या करते हैं

su - openproject -c "your_shell_script"

Openproject से पहले - से अवगत रहें। यह आपके उपयोगकर्ता पर्यावरण चर के बजाय ओपनप्रोजेक्ट के पर्यावरण चर को सेट करेगा।


मुझे sudoशुरुआत में जोड़ने की जरूरत थी अन्यथा उसने मुझसे मेरा पासवर्ड मांगा।
इवनविघ्न

sudoपासवर्ड को पहली बार चलाने के लिए भी पूछेंगे, इसलिए अपने सामान को एक शेल स्क्रिप्ट में रखने की सलाह दें और इसे suया तो साथ sudo
चलाएं

8

यदि आप बैश का उपयोग करते हैं तो आप यहां कर सकते हैं-डॉक्टर

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

इस तरह से आप कई कमांड निष्पादित कर सकते हैं और स्थिति को स्क्रिप्ट के अंदर रख सकते हैं।

सूडो के साथ भी ऐसा ही है

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

न ही मेरे लिए काम करता है। क्या आप वास्तव में स्टड से su / sudo में कमांड पास कर सकते हैं?
स्पार्कविक

1
@ श्रावक, जाँच के लिए धन्यवाद। दूसरे उदाहरण में मैं "बैश" जोड़ना भूल गया (पहले से ही अद्यतन किया गया उदाहरण) - काम करता है। पहला उदाहरण पूरी तरह से काम नहीं कर रहा है जैसा कि आपने उल्लेख किया है, मैं दीर्घकालिक कैश से टाइप कर रहा था ताकि मैं एक गलती कर सकूं, लेकिन निश्चित रूप से मैंने स्टैन के साथ काम किया था (मैं उस कार्य के लिए सबप्रोसेस चलाने के लिए जावा का उपयोग कर रहा था) सही तरीका खोजने के लिए इसका अधिक परीक्षण करें।
स्पिनस

1
मुझे विभिन्न चर पर निर्भर कमांड बनाने और इसे अन्य उपयोगकर्ता के रूप में चलाने की आवश्यकता है। इसलिए योस्मोसो का सुझाव मेरे मामले में एक विकल्प नहीं था। मैंने एक घंटे के लिए यह लड़ाई लड़ी, एक ही चीज जो मुझे काम कर रही है वह ईओएफ दृष्टिकोण (दूसरा उदाहरण) है। धन्यवाद!
जेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.