ठीक है, एलेक्स, मुद्दा यह है कि लिनक्स में सभी उपयोगकर्ता प्रक्रियाएं प्रक्रिया से शुरू होती initहैं, जिनकी पीआईडी 1 है। उदाहरण के लिए, pstreeअपनी प्रक्रियाओं के पेड़ को देखने के लिए चलाएं , जिसकी जड़ अयोग्य है। initआजकल प्रक्रिया कार्यान्वयन के कई संस्करण हैं। , सबसे उल्लेखनीय हैं
- sysVinit (शास्त्रीय इनिट, अभी भी कुछ वितरण द्वारा उपयोग किया जाता है, जिसमें पुराने डेबियन भी शामिल हैं)
- अपस्टार्ट इनिट, पुराने उबंटू और कुछ आरएचईएल (रेड हैट) और पुराने फेडोरा संस्करणों द्वारा उपयोग किया जाता है
- systemd init, आधुनिक फेडोरा, उबंटू, डेबियन, RHEL, SUSE संस्करणों द्वारा उपयोग किया जाता है
परंपरागत रूप से, यूनिक्स ने init नामक init कार्यान्वयन का उपयोग किया sysVinit, जिसे Unix के https://ru.wikipedia.org/wiki/UNIX_System_V संस्करण के नाम से पुकारा जाता है । यह बहुत प्रभावशाली है और अन्य inits इसके संगत हैं।
मूल रूप से, sysVinit पहले /etc/inittabफाइल को पढ़ता है, निर्णय लेता है, जिसे चलाने के लिए रनवे होता है और /etc/init.d/rcस्क्रिप्ट को तथाकथित init स्क्रिप्ट को निष्पादित करने के लिए कहता है । उदाहरण के लिए, जब यह आमतौर पर एक बहु-उपयोगकर्ता रनलेवल को बूट करता है, जो आमतौर पर उबंटू पर 2 रनलेवल/etc/init.d/rc होता है , स्क्रिप्ट को निष्पादित करना शुरू करता है /etc/rc2.d। फाइलें लिपियों के लिए केवल प्रतीकात्मक लिंक होती हैं, जबकि स्क्रिप्ट स्वयं /etc/init.dनिर्देशिका में संग्रहीत होती हैं । /etc/rc*.dनिर्देशिकाओं में उन सीमलिंक का नामकरण निम्नानुसार है। कहो, हमें निम्नलिखित स्क्रिप्ट मिली हैं /etc/rc2.d:
$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager
इसका मतलब है, कि रनवेवेल 2 इनिट प्रक्रिया पर स्विच करने से पहले प्रक्रियाओं को मार दिया network-managerजाता है, इसके स्क्रिप्ट नाम से शुरू होता है K- K02network-managerऔर फिर प्रक्रियाएं शुरू होती हैं, जिनके नाम के साथ शुरू होता है S। दो अंकों के बाद Sया K00 से 99 तक की संख्या है, जो आदेश को निर्धारित करता है, प्रक्रियाओं में शुरू कर दिया जाता है। जैसे rsyslogकि पहले शुरू किया गया है apache2, क्योंकि 16 17 से कम है (जो समझ में आता है, क्योंकि आप चाहते हैं कि अपाचे rsyslog की तार्किक क्षमताओं पर भरोसा करें। , इस प्रकार rsyslog को पहले शुरू किया जाना चाहिए)। स्क्रिप्ट कैजुअल शेल स्क्रिप्ट हैं, जिनके द्वारा निष्पादित किया जाता है #!/bin/sh।
तो, मूल रूप से sysVinit शैली में स्टार्टअप पर एक कार्यक्रम शुरू करने, अपनी खुद की पटकथा लिखने (यह किसी उदाहरण से कॉपी-पेस्ट, आप में मिल गया है /etc/init.d), के लिए डाल दिया /etc/init.dऔर एक उचित नाम, उदाहरण के लिए के तहत यह करने के लिए एक सिमलिंक बनाने
S99mytrojanमें /etc/rc2.d। यहाँ /etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.html में ठेठ sysVinit स्क्रिप्ट की व्याख्या दी गई है
अब, उबंटू के लोगों ने फैसला किया कि वे init से अतिरिक्त कार्यक्षमता चाहते हैं। वे एक तेज़ बूटिंग ओएस चाहते थे, इसलिए वे चाहते थे कि उनकी स्क्रिप्ट को समानांतर में निष्पादित किया जाए; वे चाहते थे कि मृत प्रक्रियाएं अपने आप फिर से शुरू हो जाएं; वे चाहते थे कि प्रक्रियाएँ एक-दूसरे को घटनाओं के द्वारा स्पष्ट रूप से आह्वान करें (ताकि अपाचे "syslog start" इवेंट द्वारा चलाया जाए, और syslog "फ़ाइल सिस्टम माउंटेड" इवेंट आदि द्वारा चलाया जाता है, इसलिए हमारे पास कुछ संख्याओं के बजाय इवेंट्स 00 हैं -99)। इस प्रकार, वे Upstart बना चुके हैं और यहां बताया गया है कि यह कैसे काम करता है। अपस्टार्ट इनस्क्रिप्ट को /etc/initनिर्देशिका में रखा जाता है (साथ भ्रमित न करें /etc/init.d)। अपस्टार्ट आमतौर पर /etc/init.d/rcभी चलता है, इसलिए यह आपके sysVinit स्क्रिप्ट को सामान्य रूप से निष्पादित करने वाला है। लेकिन अगर आप चाहते हैं कि बाहर निकलने पर आपकी स्क्रिप्ट को रिस्पॉन्स किया जाए - अपस्टार्ट इवेंट आपके लिए हैं।
हालाँकि मैं यह नहीं देख सकता कि मेरी स्क्रिप्ट काम कर रही है, मुझे लगता है, कि आपके उद्देश्य के लिए, आपको निम्नलिखित /etc/init/mytrojan.confस्क्रिप्ट लिखनी चाहिए :
start on runlevel [02]
respawn
exec mytrojan --argument X
लेकिन अगर आपको कम से कम फाइल सिस्टम और नेटवर्क पर निर्भरता की आवश्यकता है, तो हो सकता है कि यह start on runlevel [02]कुछ इस तरह से बदल दे :
start on (local-filesystems and net-device-up IFACE!=lo)
चेतावनी: मैंने इसकी शुद्धता की जाँच नहीं की, क्योंकि मैं नहीं कर सकता। विशेष रूप से, मैं इस बारे में निश्चित नहीं हूं कि आपके नेटवर्क कनेक्शन के उठने और चलने के बाद स्क्रिप्ट कैसे शुरू करें (मैंने इस संस्करण का उपयोग किया है )। "नेटवर्क अप अपस्टार्ट" के लिए गुग्लिंग का प्रयास करें।