मैं रूट के रूप में एक लॉन्च कमांड कैसे चलाता हूं


32

मेरे पास .plist फ़ाइल के रूप में निम्न लॉंचक्टल कमांड है। इसे लोड किया गया है और दिन में एक बार चलाने के लिए सेट किया गया है, लेकिन इसे रूट के रूप में चलाने की आवश्यकता है और मुझे यकीन नहीं है कि इसे कैसे सत्यापित किया जाए।

इसके अलावा, यह क्रोन नौकरी मूल रूप से एक निर्देशिका में सीडी करता है और एक कमांड चलाता है। मुझे यकीन है कि लॉन्चड के पास निर्देशिका को निर्दिष्ट करने का एक बेहतर तरीका है जहां यह कमांड चलाने वाला है।

मुझे कैसे पता चलेगा कि यह रूट के रूप में चलाया गया है और क्या इसे लिखने का एक बेहतर तरीका है?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>dev.project.frontpage.feedparser</string>
    <key>ProgramArguments</key>
    <array>
        <string>cd</string>
        <string>/Users/eman/src/project/trunk/includes/;</string>
        <string>./feed-parser.php</string>
        <string>-c</string>
        <string>./feed-parser-config.xml</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>12</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>

जवाबों:


46

किस फ़ोल्डर में .plistसंग्रहीत है?

launchdDaemons ( /Library/LaunchDaemonsया /System/Library/LaunchDaemons) को रूट के रूप में चलाता है , और चाहे उपयोगकर्ता लॉग इन हों या न हों, उन्हें चलाएंगे। लॉन्च एजेंटों ( /Library/LaunchAgents/या ~/Library/LaunchAgents/) जब कोई उपयोगकर्ता है कि उपयोगकर्ता के रूप में लॉग ऑन है चलाए जा रहे हैं। डेमॉन पर स्क्रिप्ट चलाने वाले उपयोगकर्ता को बदलने के लिए आप सेतु का उपयोग नहीं कर सकते।

क्योंकि आप इसे अपने साथ जोड़ना /Library/LaunchDaemonsचाहते हैं, इसलिए सुनिश्चित करना चाहेंगे कि आप इसे launchdव्यवस्थापक विशेषाधिकारों (जैसे sudo launchctl load -w /Library/LaunchDaemons/com.apple.samplelaunchdscript.plist) के साथ लोड करें ।

की जाँच करें man launchdअधिक जानकारी के लिए।


धन्यवाद। यह वही है जो मैं जड़ मुद्दे का जवाब देने के लिए देख रहा था। स्क्रिप्ट / लाइब्रेरी / लॉन्चडैमन्स में है, इसलिए यह पहले से ही रूट के रूप में चल रहा था।
इमैनुएल मेवांगी

एक नौसिखिया सवाल: launchctlडेमॉन स्थापित करने के लिए क्या आवश्यक है? मेरा मतलब है, यह नहीं है कि इसी पथ में plist फ़ाइल की प्रतिलिपि बनाएँ?
क्लॉडिक्स

@ क्लॉडिक्स: यह सही है। लॉन्चिंग कॉन्‍फ़िगर करने की जगह पर्याप्त नहीं है - आपको अभी भी इसे "चालू करना है" (
लॉन्चक्टल

4

क्या आपने लॉन्च किए गए संपादकों में से एक का उपयोग करने की कोशिश की है?

यह सुनिश्चित करने के लिए कि इसे रूट के रूप में चलाया जाता है, मुझे पूरा यकीन है कि लॉन्च प्रोग्राम रूट के रूप में चलेगा। कभी स्क्रिप्ट का स्वामित्व देने के बारे में सोचकर chmod का उपयोग करना? इस तरह, यह तब तक नहीं चलेगा जब तक कि रूट के रूप में नहीं चलता। फिर आपको यह सत्यापित करने की आवश्यकता है कि यह चलता है।

sudo chown root:admin script_to_run_by_launchd

मैंने इस स्क्रिप्ट को लिखने के लिए लिंगोन का इस्तेमाल किया। और मैं तेंदुए में अच्छी तरह से काम कर सकते हैं।
इमैनुएल मेवांगी

3

LaunchAgents में संपत्ति की सूची भी काम करती है, लेकिन आपको sudo के साथ एजेंटों और डेमॉन दोनों को लोड करना होगा:

sudo chown root /Library/LaunchAgents/test.plist
sudo launchctl load /Library/LaunchAgents/test.plist

यदि प्लिस्ट के पास अक्षम कुंजी नहीं है, तो यह अगले लॉगिन पर लोड होता है या डिफ़ॉल्ट रूप से पुनरारंभ होता है, और -wआवश्यक नहीं है।

तकनीकी नोट TN2083: डेमॉन और एजेंट :

एक डेमन एक प्रोग्राम है जो समग्र प्रणाली के हिस्से के रूप में पृष्ठभूमि में चलता है (अर्थात, यह किसी विशेष उपयोगकर्ता से बंधा नहीं है)। एक डेमन किसी भी जीयूआई को प्रदर्शित नहीं कर सकता है; अधिक विशेष रूप से, इसे विंडो सर्वर से कनेक्ट करने की अनुमति नहीं है।

[...]

एक एजेंट एक ऐसी प्रक्रिया है जो किसी विशेष उपयोगकर्ता की ओर से पृष्ठभूमि में चलती है। एजेंट उपयोगी होते हैं क्योंकि वे उन चीजों को कर सकते हैं जो डेमन नहीं कर सकते हैं, जैसे उपयोगकर्ता के होम डायरेक्टरी को मज़बूती से एक्सेस करना या विंडो सर्वर से कनेक्ट करना।


3

विशेष रूप से लॉन्च डेमॉन के मूल विशेषाधिकारों के साथ लॉन्च एजेंट की तलाश में जाने वाले Googlers के लिए , यह निम्न द्वारा किया जा सकता है:

  • में अपना LaunchAgent बनाएं ~/Library/LaunchAgents
  • अपने आवेदन को अपनी मुट्ठी में संपत्ति के sudoमाध्यम से चलाएंProgramArguments
  • में NOPASSWDअपने आवेदन के लिए विकल्प सेट करें/etc/resolvers.d

अधिक विवरण के लिए, यह और यह उत्तर देखें।


2

लॉन्चकंट्रोल ने मेरे लिए योसेमाइट में दर्द रहित बना दिया। सेवाओं को बनाने या संपादित करने में मदद करने के लिए इसमें एक अच्छा ड्रैग-एन-ड्रॉप GUI है। उन सभी सेवाओं को देखना आश्चर्यजनक था, जिनके बारे में मुझे जानकारी नहीं थी।

कदम

  1. लॉन्चकंट्रोल शुरू करें
  2. GlobalDeamons में शीर्ष-बाएँ परिवर्तन और अपना व्यवस्थापक पासवर्ड दर्ज करें
  3. फ़ाइल> नई
  4. लेबल के तहत, इसे एक विशिष्ट नाम दें। कन्वेंशन "com.company.appname" है
  5. प्रोग्राम के तहत यूनिक्स शैल स्क्रिप्ट या जो भी कमांड आप बिना तर्क के उपयोग करना चाहते हैं चलाने के लिए
  6. यदि आपके ऐप को "डिफ़ॉल्ट argv" से "कस्टम argv" तक ड्रॉपडाउन फ़ील्ड को बदलने के लिए तर्क की आवश्यकता है
    1. अब आप वह तर्क प्रदान करें जो आप सामान्य रूप से वास्तविक कमांड लाइन से चलाएंगे।
  7. लोड पर चलाएं वैकल्पिक है, आप तय करते हैं।
  8. दाईं ओर से, StartInterval को खींचें और छोड़ें और इच्छित अंतराल सेट करें। सहायता मेनू के अंतर्गत FAQ बहुत अच्छा है।

क्या आप कृपया अपनी पोस्ट को संपादित कर सकते हैं जिसमें उन चरणों को शामिल किया जा सकता है जो उनकी समस्या को हल करने के लिए उठाए जा सकते हैं?
Cfinley
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.