2011-09-19 5 views
11

मैं बैश (उबंटू) में एक इनिट स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो एक विशिष्ट उपयोगकर्ता के तहत एक सेवा शुरू करता है।बैश इनिट - विशिष्ट उपयोगकर्ता के तहत सेवा शुरू करें

क्या इसके अलावा ऐसा करने का कोई बेहतर तरीका है?

su - <user> -c "bash -c 'cd $DIR ;<service name>'" 
+0

के लिए अन्य विकल्पों के बारे में अधिक जानकारी का उत्तर आपके प्रश्न के उत्तर, तो कृपया इसे स्वीकार करते हैं। – Carl

उत्तर

4

वैकल्पिक रूप से, आप daemon समारोह अपने /etc/init.d/functions फाइल में परिभाषित का उपयोग कर सकते हैं:

daemon --user=<user> $DIR/program 

आप अपने वाक्य विन्यास में देखें, तो आप पीआईडी ​​फ़ाइल स्थान को परिभाषित करने, अच्छा स्तर की स्थापना की तरह अन्य बातों के कर सकते हैं, और whatnot। यह अन्यथा वास्तव में डेमन्स के रूप में सेवाओं को शुरू करने के लिए उपयोगी है। daemon के साथ शुरू की गई सेवाओं को आसानी से किसी अन्य फ़ंक्शंस फ़ंक्शन, killproc द्वारा समाप्त किया जा सकता है।

+0

धन्यवाद। जिस समस्या में मैं चल रहा हूं वह यह है कि यह एक ऐसी प्रक्रिया है जिसे किसी विशेष निर्देशिका से चलाने की आवश्यकता होती है लेकिन प्रक्रिया वास्तव में उस निर्देशिका में नहीं होती है। –

2

आप /etc/init.d/ के तहत एक स्क्रिप्ट बना सकते हैं your_service_name कहते हैं, कम से कम सामग्री

साथ #!/bin/sh
su - <user> -c "bash -c 'cd $DIR ;<service name>'"

स्क्रिप्ट के लिए उचित अनुमति प्रदान करें। अब update-rc.d कमांड को /etc/rc<run_level>.d निर्देशिका में अपनी स्क्रिप्ट के लिए सॉफ्ट लिंक बनाने के लिए उपयोग करें ताकि स्क्रिप्ट चलाया जा सके जब सिस्टम उल्लिखित रन स्तर से शुरू होता है।
संदर्भ & संदर्भ के लिए /etc/init.d/ के तहत स्क्रिप्ट देखें कृपया स्क्रिप्ट लिखने के बारे में अधिक जानकारी के लिए /etc/init.d/README पर जाएं। update-rc.d के लिए मैन पेज update-rc.d के उपयोग के बारे में भी जानने में मदद करेगा। यह निश्चित रूप से उबंटू मशीन पर उपयोग करता है जो मैं उपयोग करता हूं, लेकिन मुझे लगता है कि यह सुविधा डिस्ट्रोज़ में उपलब्ध होगी।
आशा है कि इससे मदद मिलती है!

1

मैं एक ही मुद्दा था और मैं द्वारा

  1. इसे हल बैश स्क्रिप्ट बनाएं और पैटर्न
    #!/bin/bash
    su <user> -c "bash -c '<path to service> $1'"

  2. सेटअप निम्नलिखित का उपयोग कर /etc/init.d/ में रख निम्न आदेश
    sudo update-rc.d <my_scrpit> defaults

  3. का उपयोग कर स्क्रिप्ट के लिए कोड चलाएं

एक बार यह स्क्रिप्ट रन कोड में सेट हो जाने पर, पुनरारंभ करने पर, रूट स्क्रिप्ट चलाता है और रन मोड की स्थिति के आधार पर स्क्रिप्ट को $ 1 के रूप में प्रारंभ/बंद कर देगा।
यदि आप अपनी स्क्रिप्ट को पुनरारंभ किए बिना परीक्षण करना चाहते हैं तो आपको इसे रूट के रूप में चलाया जाना चाहिए और सेवा क्रिया को पास करना चाहिए उदा। शुरू/बंद/पुनः आरंभ ....
root# ./etc/init.d/my_scrpit start

+0

मैंने इसे उबंटू 16.04 में '/ etc/rc.local' में लागू करने का प्रयास किया, लेकिन मेरी टेस्ट स्क्रिप्ट निष्पादित नहीं हुई: ' su -l user -c "bash/home/user/bin/start_check" '। लिपि कुछ लॉग लिखने की उम्मीद है। – beemaster

20

उबंटू start-stop-daemon जो पहले से ही इस सुविधा का समर्थन करता है। उचित रूप से mynewservice

sudo cp /etc/init.d/skeleton /etc/init.d/mynewservice

संपादित करें:

/etc/init.d से कंकाल फ़ाइल का उपयोग करें।

--chuid username:group

उदाहरण::

बदलें

start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

को

लाइनों कि फोन शुरू-स्टॉप-डेमॉन के लिए निम्न पैरामीटर जोड़ें 210 start-stop-daemon --start --quiet --chuid someuser:somegroup --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

अंत में, अपने सेवा रजिस्टर और इसे शुरू:

update-rc.d mynewservice defaults 99 && service mynewservice start

शुरू रोकने के डेमॉन here

संबंधित मुद्दे