launchd स्क्रिप्ट और प्रक्रियाओं को शुरू करने, रोकने और प्रबंधित करने के लिए एक उपकरण है। यदि आपने Linux के किसी भी संस्करण के साथ काम किया है, तो आप cron से परिचित हो सकते हैं। launchd मूल रूप से macOS में cron है।
डेमॉन क्या हैं?
डेमॉन (उच्चारित "डिमन्स") वे स्क्रिप्ट हैं जो बैकग्राउंड में चलती हैं। एप्लिकेशन के विपरीत, डेमॉन प्रक्रियाओं के रूप में चलते हैं और उपयोगकर्ता या किसी अन्य एप्लिकेशन के प्रत्यक्ष नियंत्रण में नहीं होते हैं। macOS पर वे लॉन्चड फ्रेमवर्क की कमान के तहत होते हैं जो तय करता है कि वे कब शुरू और रुकते हैं।
असामान्य नाम मैक्सवेल के डेमॉन से आता है, एक काल्पनिक एजेंट जो थर्मोडायनामिक्स विचार प्रयोग में अणुओं को क्रमबद्ध करता है।
स्क्रिप्ट लिखना

launchd के माध्यम से डेमॉन चलाने के लिए, आपको कुछ स्क्रिप्ट लिखने की आवश्यकता होगी। सबसे आम स्क्रिप्टिंग भाषा bash है। यदि आप bash स्क्रिप्टिंग के बारे में अधिक जानना चाहते हैं, तो आप हमारे bash स्क्रिप्टिंग के लिए शुरुआती गाइड को देख सकते हैं।
launchd का उपयोग करना
launchd में स्क्रिप्ट जॉब परिभाषाओं द्वारा ट्रिगर की जाती हैं जो विशिष्ट निर्देशिकाओं में संग्रहीत .plist फ़ाइलें हैं। ये XML फ़ाइलें जॉब को एक नाम देती हैं, निर्दिष्ट करती हैं कि कौन सी स्क्रिप्ट लॉन्च की जानी चाहिए, और इंगित करती हैं कि स्क्रिप्ट कब चलनी चाहिए। एक बार जब आप अपनी स्क्रिप्ट लिख लेते हैं, तो आप एक जॉब परिभाषा लिखेंगे और लोड करेंगे जो उचित समय पर स्क्रिप्ट लॉन्च करती है।
एक जॉब परिभाषा नीचे दिए गए जैसी दिखती है:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.restart</string> <key>Program</key> <string>/Users/user/Scripts/restart.sh</string> <key>RunAtLoad</key> <true/> </dict> </plist>
आवश्यकतानुसार संशोधित करें, फिर इसे .plist एक्सटेंशन के साथ एक टेक्स्ट फ़ाइल में डालें और इसे सही निर्देशिका में डालें (नीचे देखें)।
जॉब विवरण के कुछ प्रमुख भाग हैं:
- Label: launchd के भीतर जॉब का नाम। प्रत्येक जॉब के लिए अद्वितीय होना चाहिए। ये रिवर्स डोमेन नोटेशन में लिखे जाते हैं, और निजी एजेंटों के लिए "local" एक बढ़िया डोमेन है।
- Program: इस जॉब विवरण द्वारा लॉन्च की जाने वाली स्क्रिप्ट का पूर्ण पथ।
- RunAtLoad: वर्णन करता है कि स्क्रिप्ट कब चलनी चाहिए। यहां कुछ अलग विकल्प हैं:
- RunAtLoad: जॉब परिभाषा लोड होते ही चलाएं। प्रति लोड केवल एक बार चलता है।
- StartInterval: हर n सेकंड में जॉब शुरू करें। यह उदाहरण हर 7200 सेकंड या हर 2 घंटे में जॉब चलाएगा।
<key>StartInterval</key> <integer>7200</integer>
- StartCalendarInterval: किसी विशिष्ट समय और तारीख पर जॉब चलाएं। नीचे दिया गया कोड हर दिन सुबह 9 बजे जॉब चलाएगा।
<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>
एजेंट बनाम डेमॉन
एक बार जब आप अपना जॉब विवरण लिख लेते हैं, तो आपको इसे उचित निर्देशिका में सहेजना होगा।
launchd आगे एजेंट और डेमॉन के बीच अंतर करता है। एक एजेंट लॉग-इन उपयोगकर्ता की ओर से चलता है, जबकि एक डेमॉन रूट उपयोगकर्ता के तहत चलता है। इसका मतलब है कि यदि आप किसी स्क्रिप्ट को एक विशिष्ट उपयोगकर्ता खाते तक सीमित करना चाहते हैं, तो आप एक एजेंट का उपयोग कर सकते हैं। यदि आप कुछ ऐसा चाहते हैं जो कोई फर्क नहीं पड़ता कि कौन लॉग इन है, तो आप एक डेमॉन का उपयोग करेंगे।
एजेंट और डेमॉन के बीच अंतर इस बात से आता है कि वे कंप्यूटर पर कहां सहेजे गए हैं:
- "~/Library/LaunchAgents" लॉग-इन उपयोगकर्ता की ओर से चलता है
- "/Library/LaunchDaemons" रूट उपयोगकर्ताओं की ओर से चलता है
आपको अपना plist सही स्थान पर सहेजना होगा।
launchctl में जॉब लोड करना
एक बार जब आप अपनी स्क्रिप्ट बना लेते हैं और अपने एजेंट को सही जगह पर सहेज लेते हैं, तो आपको इसे launchctl में लोड करना होगा। यह भविष्य में लॉगिन पर स्वचालित रूप से होगा।
यह देखने के लिए कि launchctl में वर्तमान में क्या चल रहा है, आप टर्मिनल में launchctl list का उपयोग कर सकते हैं। इस विशाल सूची को आपके स्क्रिप्ट के लिए grep किया जा सकता है जैसे कि निम्न द्वारा लेबल करके:
launchctl list | grep local.restart
एक स्क्रिप्ट लोड करने के लिए, टर्मिनल खोलें और निम्न कमांड का उपयोग करें:
launchctl load ~/Library/LaunchAgents/local.restart.plist
launchctl कतार से स्क्रिप्ट को हटाने के लिए, unload कमांड का उपयोग करें:
launchctl unload ~/Library/LaunchAgents/local.restart.plist
एक जॉब लोड करने से यह launchd कतार में चला जाता है, और जॉब अपने लॉन्च शर्तों में निर्दिष्ट समय पर चलेगा। यदि आप तुरंत एक स्क्रिप्ट चलाना चाहते हैं चाहे कुछ भी हो, तो आपको "start" कमांड का उपयोग करना चाहिए:
launchctl start local.restart
यह कमांड जॉब के लेबल को लेता है और केवल तभी काम करेगा यदि जॉब पहले से ही launchctl में लोड हो चुका है।
निष्कर्ष
आप launchd का उपयोग करके स्क्रिप्ट बना सकते हैं जो फाइलों को साफ करने, अपने सर्वर को शेड्यूल पर रीस्टार्ट करने या किसी निश्चित फ़ाइल के प्रकट होने पर एप्लिकेशन चलाने जैसे काम करते हैं। launchd के बारे में बहुत कुछ सीखने के लिए, आप launchd ट्यूटोरियल देख सकते हैं।