मैं init.d स्क्रिप्ट का संपादन कर रहा हूं। Init.d स्क्रिप्ट एक उपयोगिता स्क्रिप्ट चलाता है जो तब एक प्रक्रिया चलाता है। या तो बश लिपियों से मैं इसे विशिष्ट उपयोगकर्ता और समूह के रूप में मुख्य प्रक्रिया कैसे शुरू करूँगा?
मैं init.d स्क्रिप्ट का संपादन कर रहा हूं। Init.d स्क्रिप्ट एक उपयोगिता स्क्रिप्ट चलाता है जो तब एक प्रक्रिया चलाता है। या तो बश लिपियों से मैं इसे विशिष्ट उपयोगकर्ता और समूह के रूप में मुख्य प्रक्रिया कैसे शुरू करूँगा?
जवाबों:
सु (1) कमांड का उपयोग करने का सबसे सरल तरीका है, इसमें एक विकल्प है जो आपको उपयोगकर्ता के शेल के माध्यम से कमांड चलाने की अनुमति देता है, उदाहरण:
su foo -c ls
यह उपयोगकर्ता foo पर स्विच करेगा और ls कमांड चलाएगा। यदि आप जिस उपयोगकर्ता का उपयोग करना चाहते हैं, उसके पास एक वैध शेल नहीं है (अर्थात यह / etc / गोले में नहीं है, जैसे / बिन / गलत या / sbin / nologin) तो आपको कमांड लाइन पर एक शेल निर्दिष्ट करना होगा। आउटपुट के साथ उदाहरण:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &तो मुझे एक त्रुटि मिलती है यदि मैं su www-dataसभी वेरिएशन सेट करता हूं और ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &इसे चलाता है तो यह ठीक काम करता है। मैं इसे कैसे हल करूं?
suएक एकल तर्क लेता है, जो एक शेल कमांड है। आपको लिखने की जरूरत है su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"', और सुनिश्चित करें कि MONOSERVERऔर WEBAPPSमूल शेल द्वारा निर्यात किया जाता है। (नोट: ऐसा न करें su … -c "$MONOSERVER …"क्योंकि यह विफल हो जाएगा यदि किसी भी चर में शेल विशेष वर्ण हैं।) और यदि आपके पास एक समर्पित डेमन लांचर है जैसे किstart-stop-daemon , इसका उपयोग करें।
यदि start-stop-daemonआपके सिस्टम पर उपलब्ध है, तो आपको शायद इसका उपयोग करना चाहिए और इसके विकल्पों (विशेषकर -uऔर -gइस मामले में) पर एक नज़र रखना चाहिए ।
(अन्यथा, आप suऔर के संयोजन का उपयोग कर सकते हैं sg।)
अद्यतन: यहाँ कुछ /etc/init.d/mpdस्क्रिप्ट से लिया गया एक उदाहरण है (जो उपयोग करता है start-stop-daemon):
प्रारंभ आदेश:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
सब कुछ जो इस प्रकार --है वह /usr/bin/mpdकार्यक्रम का एक तर्क है। (आरंभ-स्टॉप-डेमॉन स्क्रिप्ट द्वारा डेमोंनाइजेशन प्रक्रिया का ध्यान रखा जाता है इसलिए mpdइसे इसके बारे में परवाह नहीं करने के लिए कहा जाता है --nodaemon।)
स्टॉप कमांड:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
तो mpdअपने आप में विशेषाधिकार छोड़ने नहीं किया गया था, एक (उदाहरण के लिए) जोड़ने के लिए की आवश्यकता होगी -u mpd, -g mpdके लिए विकल्प start-stop-daemonआदेश।
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Usage: su [options] [LOGIN]औरsu: unrecognized option '--debug'