तत्परता प्रोटोकॉल बेमेल
जैसा कि विलैंड ने कहा, Typeसेवा का महत्व महत्वपूर्ण है। यह सेटिंग बताता है कि किस तत्परता प्रोटोकॉल सिस्टमड को सेवा से बोलने की उम्मीद है। एक simpleसेवा को तुरंत तैयार मान लिया गया है। एक forkingप्रारंभिक प्रक्रिया के लिए तैयार होने के बाद एक बच्चा लेने के लिए एक सेवा ली जाती है और फिर बाहर निकल जाती है। एक dbusसेवा है जब एक सर्वर डेस्कटॉप बस पर दिखाई देता है तैयार होने के लिए लिया जाता है। इत्यादि।
यदि आपको सेवा इकाई में घोषित तत्परता प्रोटोकॉल नहीं मिलता है कि सेवा क्या करती है, तो चीजें गड़बड़ हो जाती हैं। रीडायरेक्ट प्रोटोकॉल मिसमैच की वजह से सेवाएं सही तरीके से शुरू नहीं हो पाती हैं, या (आमतौर पर) सिस्टम द्वारा फेल होने का गलत (गलत) निदान किया जाता है। जब किसी सेवा को सिस्टम शुरू करने में विफल होने के रूप में देखा जाता है, तो यह सुनिश्चित करता है कि सेवा की प्रत्येक अनाथ अतिरिक्त प्रक्रिया जिसे विफलता के भाग के रूप में छोड़ दिया गया हो (सेवा के दृष्टिकोण से) सेवा को ठीक से निष्क्रिय करने के लिए उसे मार दिया जाता है। राज्य।
आप बिल्कुल यही कर रहे हैं।
सबसे पहले, साधारण सामान: sh -cमेल नहीं खाता Type=simpleया Type=forking।
में simpleप्रोटोकॉल, प्रारंभिक प्रक्रिया के लिए लिया जाता है हो सकता है सेवा प्रक्रिया। लेकिन वास्तव में एक sh -cआवरण एक बच्चे की प्रक्रिया के रूप में वास्तविक सेवा कार्यक्रम चलाता है । तो MAINPIDगलत ExecReloadहो जाता है और काम करना बंद कर देता है, शुरुआत के लिए। उपयोग करते समय Type=simple, किसी को पहली जगह का उपयोग करना चाहिए sh -c 'exec …'या नहीं करना चाहिए sh -c। उत्तरार्द्ध कुछ लोगों को लगता है कि अधिक बार सही पाठ्यक्रम है।
sh -cType=forkingया तो मेल नहीं खाता । एक forkingसेवा के लिए तत्परता प्रोटोकॉल काफी विशिष्ट है। प्रारंभिक प्रक्रिया में एक बच्चे को कांटा जाता है, और फिर बाहर निकल जाता है। systemd इस प्रोटोकॉल के लिए एक समय सीमा लागू करता है। यदि प्रारंभिक प्रक्रिया आवंटित समय के भीतर कांटा नहीं करती है, तो यह तैयार होने में विफलता है। यदि प्रारंभिक प्रक्रिया आवंटित समय के भीतर नहीं निकलती है, तो वह भी विफलता है।
अनावश्यक आतंक है ossec-control
जो हमें जटिल चीज़ों की ओर ले जाता है: वह ossec-controlस्क्रिप्ट।
यह पता चला है कि यह एक सिस्टम 5 rcस्क्रिप्ट है जो 4 और 10 प्रक्रियाओं के बीच बंद है, जो खुद अपनी बारी कांटा और बाहर भी निकलता है। यह उन सिस्टम 5 rcस्क्रिप्टों में से एक है जो एक एकल स्क्रिप्ट में सर्वर प्रक्रियाओं के एक पूरे सेट को प्रबंधित करने का प्रयास करता है, forछोरों, दौड़ की स्थिति के साथ, sleepउनसे बचने की कोशिश करने के लिए मनमाने ढंग से एस, विफलता मोड जो सिस्टम को आधे-अधूरे स्थिति में चोक कर सकते हैं, और अन्य सभी भयावहताएं जो लोगों को दो दशक पहले एआईएक्स सिस्टम रिसोर्स कंट्रोलर और डेमोंटोल्स जैसी चीजों का आविष्कार करने के लिए मिलीं। और आइए एक द्विआधारी निर्देशिका में छिपी शेल स्क्रिप्ट को न भूलें जो इसे मक्खी पर फिर से लिखती है, आइडिओसिंक्रोनैटिक enableऔर disableक्रियाओं को लागू करने के लिए ।
तो जब आप /bin/sh -c '/var/ossec/bin/ossec-control start'क्या होता है:
- systemd कांटे जो यह सेवा प्रक्रिया होने की उम्मीद करता है।
- वह खोल है, जो कांटे
ossec-control।
- बदले में 4 और 10 पोते के बीच कांटे।
- पोते सभी कांटे और बदले में बाहर निकलते हैं।
- महान-पोते सभी कांटे और समानांतर में बाहर निकलते हैं।
ossec-control बाहर निकलता है।
- पहला खोल बाहर निकलता है।
- सेवा प्रक्रियाओं थे महान-महान पोते, लेकिन क्योंकि काम कर रहे मैचों में से इस तरह से न तो
forking है और न हीsimple तत्परता प्रोटोकॉल, systemd एक पूरे के रूप में मानता है सेवा में विफल रहा है और बन्द हो जाता है की है, यह वापस नीचे।
इस हॉरर में से कोई भी वास्तव में सिस्टमड के तहत बिल्कुल भी आवश्यक नहीं है। इसमें से कोई नहीं।
एक systemd टेम्पलेट सेवा इकाई
इसके बजाय, एक बहुत ही सरल टेम्पलेट इकाई लिखता है :
[यूनिट]
विवरण = OSSEC HIDS% i सर्वर
= Network.target के बाद
[सेवा]
प्रकार = सरल
ExecStartPre = / usr / bin / env / var / ossec / bin /% p-% i -t
ExecStart = / usr / bin / env / var / ossec / bin /% p-% i -f
[इंस्टॉल]
WantedBy = multi-user.target
इसे इस रूप में सहेजें /etc/systemd/system/ossec@.service।
विभिन्न वास्तविक सेवाएं इस टेम्प्लेट की तात्कालिकता हैं , जिसका नाम है:
ossec@dbd.service
ossec@agentlessd.service
ossec@csyslogd.service
ossec@execd.service
ossec@agentd.service
ossec@logcollector.service
ossec@syscheckd.service
ossec@maild.service
ossec@analysisd.service
ossec@remoted.service
ossec@monitord.service
फिर सक्षम और अक्षम फ़ंक्शन सीधे सेवा प्रबंधन प्रणाली ( रेडहैट बग 752774 फिक्स्ड के साथ) से आता है, जिसमें छिपी शेल स्क्रिप्ट की कोई आवश्यकता नहीं है।
systemctl सक्षम करें ossec @ dbd ossec @ agentlessd ossec @ csyslogd ossec @ maild ossec @ execd ossec @ analysisd ossec @ logcollector ossec / प्रेषित ossec @ syscheckd ossec @ monitord
इसके अलावा, systemd को प्रत्येक वास्तविक सेवा को सीधे ट्रैक करने और ट्रैक करने के बारे में पता चलता है। यह उनके लॉग को फ़िल्टर कर सकता है journalctl -u। यह पता चल सकता है कि कोई व्यक्तिगत सेवा कब विफल हो गई। यह जानता है कि किन सेवाओं को सक्षम और चालू करना चाहिए।
वैसे: Type=simpleऔर -fविकल्प यहीं हैं क्योंकि वे कई अन्य मामलों में हैं। जंगली में बहुत कम सेवाएँ वास्तव में उनकी तत्परता को इंगित करती हैं exit, और ये ऐसे मामले भी नहीं हैं। लेकिन यही forkingप्रकार का मतलब है। मुख्य बस कांटे में जंगली में सेवाएं और कुछ गलती की वजह से बाहर निकलना ज्ञान धारणा है कि यही dæmons करने वाले हैं। वास्तव में, यह नहीं है। यह 1990 के दशक से नहीं है। यह पकड़ने का समय है।
आगे की पढाई