इस लेख में, हम Linux CentOS/RHEL 7/8 में सेवाओं और स्क्रिप्ट को स्वचालित रूप से प्रारंभ करने के लिए कॉन्फ़िगर करने की मूल बातें सीखेंगे। विशेष रूप से, हम systemd . से परिचित होंगे डेमॉन, सीखें कि सेवाओं को स्टार्टअप से कैसे जोड़ा जाए या उन्हें कैसे हटाया जाए, और लिनक्स में बूट पर स्क्रिप्ट या डेमॉन शुरू करने के वैकल्पिक तरीकों पर विचार करें।
लेख का उद्देश्य आपको लिनक्स में स्वचालित रूप से शुरू की गई सेवाओं या स्क्रिप्ट की सूची को जल्दी से ढूंढना, स्टार्टअप में अपनी सेवाओं या स्क्रिप्ट को जोड़ना या कुछ ऐप्स के स्वचालित स्टार्टअप को अक्षम करना सिखाना है।
Linux में Systemd सेवाओं को प्रबंधित करने के लिए Systemctl का उपयोग करना
सबसे लोकप्रिय लिनक्स डिस्ट्रोस (सेंटोस, आरएचईएल, डेबियन, फेडोरा, और उबंटू) systemd का उपयोग करते हैं init.d . के बजाय स्टार्टअप डेमॉन . सिस्टमड एक लिनक्स सेवा प्रबंधक है जिसका उपयोग अन्य डेमॉन को शुरू करने और उन्हें प्रबंधित करने के लिए किया जाता है। यह /etc/systemd/system
. से यूनिट फाइलों का उपयोग करता है (init.d /etc/init.d/
. से प्रयुक्त स्क्रिप्ट ) Systemd आपको OS बूट पर सेवा स्टार्टअप को समानांतर करने की अनुमति देता है।
सिस्टमड को प्रबंधित करने के लिए, systemctl कमांड का उपयोग किया जाता है।
सबसे पहले, सिस्टम को बूट करने के बाद हम systemd . में उपलब्ध इकाइयों की सूची की जांच करेंगे :
systemctl list-units
आप इस कमांड का उपयोग करके यूनिट फाइलों की सूची प्राप्त कर सकते हैं:
systemctl list-unit-files
यह आदेश सभी उपलब्ध यूनिट फाइलों को प्रदर्शित करेगा।
सक्रिय सेवाओं और उनके राज्यों की सूची प्रदर्शित करने के लिए, यह आदेश चलाएँ:
# systemctl list-units -t service
चूंकि स्टार्टअप के बाद कुछ इकाइयां निष्क्रिय हो सकती हैं, आप —सभी . का उपयोग करके पूरी सूची प्राप्त कर सकते हैं विकल्प।
# systemctl list-units --all
जैसा कि आप सूची से देख सकते हैं, यहां तक कि डिस्क पर न मिलने वाली सेवाओं को भी प्रदर्शित किया जाता है।
इसके अलावा, आप कुछ अन्य झंडों का उपयोग कर सकते हैं, उदाहरण के लिए:
- —राज्य — डेमॉन स्थिति का पता लगाने के लिए उपयोग किया जाता है:लोड, सक्रिय, उप
- —टाइप करें — इकाइयों को प्रकार के अनुसार फ़िल्टर करने की अनुमति देता है
उदाहरण:
systemctl list-units --all --state=active
—केवल सक्रिय सिस्टमड इकाइयों की सूची प्रदर्शित करें
systemctl list-units —type=service
— उन इकाइयों की सूची प्रदर्शित करें जो सेवाएं हैं
Systemd में सर्विस कैसे बनाएं?
सेवाओं का प्रबंधन करने के लिए, सिस्टमड एक विशेष सिंटैक्स का उपयोग कर रहा है। आपको .सेवा add जोड़ना होगा एक सेवा के नाम के बाद। उदाहरण के लिए:
# systemctl enable nginx.service
- कमांड nginx वेब सर्वर को स्टार्टअप में जोड़ता है
यह कमांड systemd . में सर्विस कमांड में निर्दिष्ट फाइल के लिए एक प्रतीकात्मक लिंक बनाएगा स्टार्टअप निर्देशिका।
# systemctl enable nginx.service
/etc/systemd/system/multi-user.target.wants/nginx.service से /usr/lib/systemd/system/nginx.service तक सिमलिंक बनाया गयाकमांड का आउटपुट उस डायरेक्टरी को दिखाता है, जिसमें सर्विस फाइल का सिमलिंक बनाया गया है।
यह जांचने के लिए कि क्या किसी सेवा को स्टार्टअप में जोड़ा गया है, आप उसकी स्थिति प्राप्त कर सकते हैं:
systemctl status nginx.service
आउटपुट में निम्न पंक्ति पर ध्यान दें:
लोडेड:लोडेड (/usr/lib/systemd/system/nginx.service; सक्षम; विक्रेता प्रीसेट:अक्षम)
सक्षम value का अर्थ है कि यह सेवा Linux स्टार्टअप में जोड़ी गई है। यदि सेवा स्वचालित रूप से प्रारंभ नहीं होती है, तो आप अक्षम देखेंगे यहाँ।
Systemd में किसी सेवा को अक्षम कैसे करें?
आप किसी सेवा को स्टार्टअप से हटा सकते हैं ताकि यह Linux बूट पर प्रारंभ न हो (जबकि सेवा स्वयं हटाई नहीं गई है)। सेवा के स्टार्टअप को अक्षम करने के लिए, निम्न आदेश चलाएँ:
# systemctl disable your_service
उदाहरण के लिए, nginx ऑटोस्टार्टअप को अक्षम करने के लिए:
# systemctl disable nginx.service
हटाया गया सिमलिंक /etc/systemd/system/multi-user.target.wants/nginx.service
ऐसा करने के बाद, एक सर्विस फाइल का सिमलिंक सिस्टमड डायरेक्टरी से हटा दिया जाएगा। आप यह सुनिश्चित कर सकते हैं कि सेवा स्वचालित रूप से प्रारंभ हो गई है:
# systemctl is-enabled nginx
सिस्टमड के साथ यूनिट्स को कैसे मास्क करें?
मुझे कुछ दुष्ट सेवाओं का सामना करना पड़ा है जो अभी भी स्टार्टअप में उन्हें अक्षम करने के बाद बनी हुई हैं और लिनक्स रीबूट के बाद शुरू हुई हैं। इस समस्या को हल करने के लिए, आप एक सेवा को मास्क कर सकते हैं:
# systemctl mask nginx.service
फिर यह या तो मैन्युअल रूप से या OS के पुनरारंभ होने के बाद प्रारंभ नहीं होगा:
# systemctl mask nginx.service
/etc/systemd/system/nginx.service से /dev/null में सिमलिंक बनाया गया।
# service nginx restart
/bin/systemctl पर पुनर्निर्देशित करना nginx.service को पुनरारंभ करना nginx.service को पुनरारंभ करने में विफल:इकाई नकाबपोश है।
आप इस आदेश का उपयोग करके किसी सेवा को अनमास्क कर सकते हैं:
# systemctl unmask nginx.service
हटाया गया सिमलिंक /etc/systemd/system/nginx.service.
यदि किसी सेवा को मास्क करने के बाद आप अपनी यूनिट फाइलों की जांच करते हैं, तो आप देखेंगे कि सेवा को मास्केड के रूप में चिह्नित किया गया है :
Rc.local के साथ स्क्रिप्ट या सेवा चलाएँ
Linux बूट पर विभिन्न स्क्रिप्ट चलाने के लिए, rc.local अक्सर प्रयोग किया जाता है।
स्क्रिप्ट के अलावा, rc.local . का उपयोग करके आप सेवाओं को भी चला सकते हैं, यहां तक कि वे भी जो systemd . का उपयोग करना शुरू कर चुके हैं . मुझे नहीं पता कि सिस्टमड होने पर आपको rc.local का उपयोग क्यों करना चाहिए, लेकिन यहां कुछ उदाहरण दिए गए हैं।
सबसे पहले, /etc/rc.local निष्पादन योग्य होना चाहिए:
chmod +x /etc/rc.local
Rc.local को systemd ऑटोस्टार्ट में जोड़ा जाना चाहिए:
systemctl enable rc-local
और हम nginx . शुरू करने के लिए एक कमांड जोड़ सकते हैं वेब सर्वर से rc.local :
service nginx start
लेकिन मैं शायद ही कभी rc.local . का उपयोग करता हूं सेवाएं शुरू करने के लिए। अधिक बार rc.local का उपयोग स्क्रिप्ट शुरू करने या एक बार कमांड चलाने के लिए किया जाता है।
उदाहरण के लिए, मैंने एक स्क्रिप्ट बनाई है /root/test.sh यह कुछ करता है और मैं इसे बूट के ठीक बाद चलाना चाहता हूं। निम्न पंक्ति को rc.local फ़ाइल में जोड़ें:
sh /root/test.sh
CentOS 7 से शुरू होकर, डेवलपर्स बताते हैं कि rc.local एक अप्रचलित डेमॉन है और स्क्रिप्ट या सेवाओं को शुरू करने के लिए इसका उपयोग करने की अनुशंसा नहीं की जाती है। लेकिन मैं इसका उपयोग तब करता हूं जब यह अभी भी काम कर रहा है क्योंकि यह बहुत आसान है।
Systemd के साथ Linux सेवा कैसे बनाएं?
आप अपना खुद का डेमॉन बना सकते हैं और इसे systemd. . के माध्यम से प्रबंधित कर सकते हैं
उदाहरण के लिए, आप वही स्क्रिप्ट शुरू करना चाहते हैं (/root/test.sh ) हर बार सिस्टम को रीबूट किया जाता है। आइए अपनी नई सेवा की फ़ाइल बनाने के साथ शुरुआत करें:
touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service
यहाँ फ़ाइल की सामग्री है:
[इकाई]विवरण=टेम्प्लेट सेटिंग्स सर्विसआफ्टर=network.target[Service]Type=oneshotUser=rootExecStart=/root/test.sh[Install]WantedBy=multi-user.target
मुख्य पैरामीटर हैं:
User
- एक उपयोगकर्ता खाता जिससे डेमॉन शुरू हुआ है
Type=oneshot
— सिस्टमड को अन्य इकाइयों के साथ जारी रखने से पहले प्रक्रिया के समाप्त होने की प्रतीक्षा करनी चाहिए
इसे जांचें और फिर से शुरू करें:# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service
● test-script.service - टेस्टलोडेड:लोडेड (/etc/systemd/system/test-script.service; अक्षम; विक्रेता प्रीसेट:अक्षम) सक्रिय:सक्रिय (चल रहा है)
अगर सेवा अच्छी तरह से काम करती है, तो इसे सिस्टमड स्टार्टअप में जोड़ें:
# systemctl enable test-script.service
/etc/systemd/system/multi-user.target.wants/test-script.service से /etc/systemd/system/test-script.service तक सिमलिंक बनाया गया।
इस प्रकार, आप किसी भी स्क्रिप्ट को ऑटोस्टार्ट में जोड़ सकते हैं और उन्हें सिस्टमड के माध्यम से प्रबंधित कर सकते हैं।
क्रॉन का उपयोग करके स्क्रिप्ट कैसे चलाएं?
यदि आप किसी स्क्रिप्ट या कमांड को कुछ आवृत्ति पर चलाना चाहते हैं, तो आप cron . का उपयोग कर सकते हैं :
crontab -e
— क्रॉन टास्क टेबल बदलने के लिए एडिटर खोलता है
और एक कार्य जोड़ें जो आप यहां चाहते हैं, उदाहरण के लिए:
* * * * * /root/test.sh
— एक मिनट में एक बार स्क्रिप्ट चलाने के लिए।
आप एक घड़ी-कुत्ता write लिख सकते हैं स्क्रिप्ट जो सेवा की स्थिति की जांच करेगी, और यदि सेवा नहीं चल रही है, तो स्क्रिप्ट इसे शुरू कर देगी। मैं अपने कुछ प्रोजेक्ट में इसी तरह का उपयोग कर रहा हूं।
क्रॉन में सभी कार्यों की सूची प्रदर्शित करने के लिए, कमांड चलाएँ:
# crontab -l
* * * * * /root/test.sh
क्रोन कार्यों को क्रम में चलाने के लिए उपलब्ध समय मान:
- मिनट:0-59
- घंटे:0-59
- महीने का दिन:1-31
- महीना:1-12
- सप्ताह का दिन:0-7 (0 या 7 रविवार है)
हमारे कार्य में, स्क्रिप्ट एक मिनट में एक बार चलती है, इसलिए वहां *तारांकन* होते हैं।
आप स्क्रिप्ट को cron . में से किसी एक में भी रख सकते हैं निर्देशिका:
- /cron.daily - दिन में एक बार चलने वाली स्क्रिप्ट के लिए
- /cron.hourly - एक घंटे में एक बार चलने वाली स्क्रिप्ट के लिए
- /cron.monthly — महीने में एक बार चलने वाली स्क्रिप्ट के लिए
- /cron.weekly — सप्ताह में एक बार चलने वाली स्क्रिप्ट के लिए
निर्दिष्ट निर्देशिकाओं में स्क्रिप्ट स्वचालित शेड्यूल के अनुसार चलाई जाएंगी।
बैश स्टार्टअप स्क्रिप्ट:.bashrc
यदि आप SSH . को प्रारंभ करते समय कुछ कार्य करना चाहते हैं कंसोल, आप .bash_profile . में कोई भी कमांड या स्क्रिप्ट जोड़ सकते हैं या .bashrc फ़ाइल। सिद्धांत रूप में, आप इनमें से किसी भी फाइल में कार्रवाई जोड़ सकते हैं, यह किसी भी स्थिति में चलाया जाएगा। आमतौर पर, आपको जिन चीज़ों की ज़रूरत होती है, उन्हें .bashrc में जोड़ा जाता है, और .bashrc को .bash_profile से शुरू किया जाता है।
मैंने .bashrc फ़ाइल में nginx वेब सेवा को पुनरारंभ करने के लिए एक कमांड जोड़ा:
service nginx restart
फिर मैंने फ़ाइल को सहेजा और SSH सत्र फिर से शुरू किया:
जैसा कि आप देख सकते हैं, टर्मिनल शुरू करते समय, वेबसर्वर को भी पुनरारंभ किया गया है। टर्मिनल शुरू करते समय क्या क्रियाएं की जा सकती हैं? यह कुछ अतिरिक्त उपकरण हो सकते हैं, जैसे अपटाइम सर्वर जांच:
या यदि आप विशिष्ट निर्देशिका में जाना चाहते हैं और mc . शुरू करना चाहते हैं ssh कंसोल चलाते समय, निम्नलिखित को .bashrc . में जोड़ें :
cd /var/
mc
उम्मीद है, लिनक्स में लिनक्स सेवा या स्क्रिप्ट स्टार्टअप को कैसे प्रबंधित किया जाए, इस बारे में यह लेख आपके लिए मददगार रहा है (यह लेख सेंटोस और आरएचईएल के लिए लिखा गया था, लेकिन अन्य डिस्ट्रो के लिए उपयुक्त)। मुझे विश्वास है कि यह जानकारी उन लोगों के लिए उपयोगी होगी जो Linux सिस्टम प्रशासन की मूल बातें पढ़ रहे हैं।