मैं 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'