Rc.local से बूट पर एक स्क्रीन सत्र चलाएं


10

मैं बूट पर rc.local में एक विशिष्ट उपयोगकर्ता के तहत एक अलग स्क्रीन को चलाने की कोशिश कर रहा हूं। नीचे दिया गया कोड मेरे पास अभी तक है, लेकिन यह मेरे लिए काम नहीं कर रहा है। सु भाग मुझे एक त्रुटि दे रहा है।

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

जवाबों:


13

मुझे लगता है कि दोनों -cमापदंडों ( suऔर bash) को कम से कम उद्धृत करना होगा।

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

इसके अलावा -अंतिम होने की उम्मीद है और यहां वांछनीय नहीं हो सकता है (देखें man su)।


कुछ और टिप्पणी। आपके जैसे एक-शॉट कमांड के लिए एक बेहतर विकल्प sudo हो सकता है, लेकिन जरूरी नहीं:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

विशेष रूप से, आप उद्धृत करने के एक कम स्तर का उपयोग कर सकते हैं sudo

एक और बात जिससे आप सावधान रहना चाहते हैं वह यह है कि विशेषाधिकार प्राप्त संदर्भ में पूर्ण पथ के बिना कमांड निष्पादित हो रही है। यह आपके आदेश में पथ के लिए su(या sudo) लेकिन इसके लिए भी है bash। आप इसे सही कर रहे हैं screen

बस निम्नलिखित का परीक्षण किया और यह अच्छी तरह से काम करता है। मुझे लगता -है कि आपकी मूल पंक्ति में मुख्य मुद्दा यह है:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

बुराई टिप्पणी: तुम tmuxएक कोशिश क्यों नहीं देते ? मैंने हाल ही में स्विच किया है और कभी पीछे मुड़कर नहीं देखा। केवल एक चीज मैं तुरंत बदलने के लिए की जरूरत उपसर्ग कुंजी संयोजन था जिसमें tmuxडिफ़ॉल्ट Ctrl+ B- करने के लिए जीएनयू वापस screenकी Ctrl+ A

यह आपकी विंडो को लगभग मनमाने ढंग से पैन (लंबवत और क्षैतिज रूप से) में विभाजित करने की अनुमति देता है और इसकी कॉन्फ़िगरेशन फ़ाइल प्रारूप (स्थिति बराबर के लिए एक सहित) वास्तव में मनुष्यों के लिए समझदार है। बेशक tmuxउतना ही अच्छा है screenजब आप बस कुछ प्रोग्राम / स्क्रिप्ट चलाना चाहते हैं जो मूल रूप से पृष्ठभूमि में डेमन के रूप में नहीं लिखा गया है। यदि आप टर्मिनल मल्टीप्लेक्सर के साथ बातचीत करने का इरादा रखते हैं, हालांकि, मैं गर्मजोशी से सलाह देता हूं tmux


मैं कुछ में यह कोशिश करूँगा। मैं जो स्क्रिप्ट चला रहा हूं वह निरपेक्ष रास्तों का उपयोग करता है, इसलिए आप सिफारिश करेंगे suया sudo?
ATLChris

1
sudoयदि आप पहले से ही रूट हैं, तो rc.local से चलाने के लिए एक अच्छा विकल्प नहीं है, क्योंकि आप एक लॉगिन शेल को याद करेंगे। साइड नोट पर, एक नज़र /etc/init/tty1.conf- [ए] गेटी को स्क्रीन के साथ बदलें।
एक्वेरेड

@aquaherd: जब मैंने लिखा था तो यह मेरे दिमाग में था लेकिन जरूरी नहीं । सुराग, वास्तव में, हमेशा की तरह है sudo su -... sudo(सुपरयुसर करते हैं), su(स्विच उपयोगकर्ता) ... .conf के बारे में अच्छा विचार
0xC0000022L

1
मुझे कहना है, मैं इस पोस्ट को सिर्फ आपकी बुरी टिप्पणी के कारण + कर रहा हूं। मुझे यह पसंद है! यह स्क्रीन के लिए एक महान प्रतिस्थापन है, क्योंकि कोई इसे एक नया सत्र शुरू करने के लिए मजबूर कर सकता है।
क्वांटम भौतिक विज्ञानी

@aquaherd sudoठीक उपयोग करके एक लॉगिन शेल शुरू कर सकता है -i
मुरु


1

यहाँ मैंने जो प्रयोग किया है वह मुझे सबसे साफ और सरल लगता है (स्वयं काम करते हुए):

इसे चलाने के लिए उपयोगकर्ता के साथ "उपयोगकर्ता" को बदलें। स्क्रीन सत्र के नाम के रूप में "nameyouchoose" को अपनी स्क्रिप्ट के पथ पर "/script/start.bash" बदलें।

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

स्रोत: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles


0

वर्तमान उपयोगकर्ता (rc.local = root) के रूप में एक नई अलग स्क्रीन में स्क्रिप्ट शुरू करना:

screen -dmS <session name> <command>, उदाहरण:

screen -dmS screenName bash /home/user/run.sh


R से एक स्क्रिप्ट शुरू करना जैसे कि user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.