मैंने /etc/init.d/ में एक स्क्रिप्ट बनाई है, जिसमें अपने घर निर्देशिकाओं से अन्य (गैर-रूट विशेषाधिकार प्राप्त) उपयोगकर्ताओं की कई स्क्रिप्ट्स को चलाना है, जैसे कि उन्होंने उन्हें शुरू किया।
मैं इन लिपियों को लॉन्च करता हूं: sudo -b -u <username> <script_of_a_particular_user>
और यह काम करता है। लेकिन प्रत्येक उपयोगकर्ता स्क्रिप्ट के लिए जो जारी है (उदाहरण के लिए कुछ प्रहरी) मैं एक संबंधित माता-पिता की सूडो प्रक्रिया देखता हूं, फिर भी जीवित और रूट के रूप में चल रहा है। यह सक्रिय प्रक्रियाओं की सूची में गड़बड़ी पैदा करता है।
तो मेरा प्रश्न यह है: मैं किसी अन्य उपयोगकर्ता के रूप में मौजूदा बैश स्क्रिप्ट से किसी अन्य स्क्रिप्ट को कैसे लॉन्च (कांटा) कर सकता हूं और इसे एक अनाथ (अकेले खड़े) प्रक्रिया के रूप में छोड़ सकता हूं?
अधिक विस्तृत विवरण:
मैं मूल रूप से मशीन पर अन्य उपयोगकर्ताओं को प्रदान करने की कोशिश कर रहा हूं, जो कि सिस्टम स्टार्ट या सिस्टम शटडाउन पर सामान चलाने के लिए है, जो उनके घर निर्देशिका में पाए गए संबंधित उपनिर्देशिकाओं में पाई गई निष्पादन योग्य फ़ाइलों को चलाकर, .startUp और .shutDown में पाया जाता है। चूँकि मुझे ऐसा करने के लिए कोई अन्य साधन नहीं मिला, इसलिए मैंने अपनी bash स्क्रिप्ट लिखी जो ठीक वैसा ही करती है और मैंने इसे /etc/init.d/ में एक सर्विस स्क्रिप्ट (कंकाल उदाहरण के बाद) के रूप में कॉन्फ़िगर किया है, इसलिए जब इसे चलाया जाता है प्रारंभ तर्क के साथ यह .startUp निर्देशिकाओं से सब कुछ लॉन्च करता है और जब इसे स्टॉप तर्क के साथ चलाया जाता है तो यह सभी उपयोगकर्ताओं के .shutown निर्देशिकाओं को उनके रूप में लॉन्च करता है।
वैकल्पिक रूप से मुझे भी दिलचस्पी है अगर मैं इस समस्या को हल करने के लिए कुछ मौजूदा समाधान का उपयोग कर सकता था।
अद्यतन
मैंने थोड़ा चारों ओर देखा है और मुझे यह प्रश्न मिला:
/unix/22478/detach-a-daemon-use-sudo
उपयोग करने के लिए, वहाँ जवाब स्वीकार किया: sudo -u user sh -c "daemon & disown %1"
मेरे लिए काम करता है। लेकिन मैंने भी % 1 को बिना बताए आजमाया और यह वैसा ही है। तो यह वही है जो मेरे लिए काम करता है जैसा कि मैंने उम्मीद की थी:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
मेरा अतिरिक्त सवाल अब यह है कि यह बिना डिस्क्राइब किए काम क्यों कर रहा है? क्या मुझे कुछ संभावित विशेष मामले के लिए, अभी भी, डिसाइड कॉल को छोड़ देना चाहिए ?
अद्यतन २
जाहिरा तौर पर यह भी काम करता है:
su <username> -c "<script_of_a_particular_user> &"
क्या इस कॉल और सुडो कॉल में कोई अंतर है? मुझे पता है कि यह संभावित रूप से एक अलग सवाल है। लेकिन जब से मैं यहाँ खुद के जवाब मिल रहा है शायद इस विषय के लिए किसी को यहाँ स्पष्ट कर सकता है।
अद्यतन 3
सु या सूडो के साथ ये दोनों विधियाँ अब मशीन को बूट करने के बाद एक नई स्टार्टर प्रक्रिया (रूट के रूप में चलने वाली एकल प्रक्रिया) का उत्पादन करती हैं। प्रक्रिया सूची में दृश्यमान है:
startpar -f -- <name_of_my_init.d_script>
यह प्रक्रिया क्यों पैदा की गई है? जाहिर है कि मैं कुछ गलत कर रहा हूं क्योंकि किसी अन्य init.d स्क्रिप्ट में यह प्रक्रिया नहीं चल रही है।
अद्यतन 4
शुरुआत के साथ समस्या हल हो गई है। मैंने उसके लिए एक और सवाल शुरू किया है: आरपार या
आईआईटी .00 से प्रक्रिया शुरू करते समय स्टार्टर प्रक्रिया लटकी हुई है
और गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं के लिए लॉन्चिंग तंत्रों पर आगे चर्चा करने के लिए एक और सवाल:
सामान्य उपयोगकर्ताओं (गैर-रूट) को आरंभीकरण और शटडाउन ऑटो-रन क्षमताओं के साथ प्रदान करना