Yosemite में लॉन्चक्टल के साथ डेमन लॉन्च नहीं कर सकते


27

मेरे पास एक लॉन्चड डेमन है ~/Library/LaunchAgentsजो मावेरिक्स में अच्छी तरह से काम करता है। लेकिन यह Yosemite सार्वजनिक बीटा में शुरू नहीं होगा। डेमन प्लिस्ट इस प्रकार है (मेरा उपयोगकर्ता नाम darksairUID 501 के साथ है)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.darksair.retrmail</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/darksair/bin/retrmail.py</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>LaunchOnlyOnce</key>
    <false/>
    <key>UserName</key>
    <string>darksair</string>
    <key>ProcessType</key>
    <string>Standard</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
  </dict>
</plist>

मूल रूप से इसे ~/bin/retrmail.pyहर 5 मिनट में चलाना चाहिए ।

मैं ध्यान देता हूं कि योसेमाइट में लॉन्च 2.0 में अपग्रेड किया गया है, और लॉन्चक्टल में नए कमांड हैं। मैंने कोशिश की

sudo launchctl kickstart user/501/org.darksair.retrmail

और यह कहा

Could not find service "org.darksair.retrmail" in domain for uid: 501

मैंने पुराने स्कूल की भी कोशिश की

sudo launchctl load ~/Library/LaunchAgents/retrmail.plist

और यह कहा

/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions

फ़ाइल मेरे और कर्मचारी समूह के स्वामित्व में है। मैंने एक ही त्रुटि के साथ 644 और 600 दोनों की अनुमति की कोशिश की।

तो क्या कोई जानता है कि योसेमाइट में लॉन्च डेमॉन को ठीक से कैसे फायर किया जाए?


अद्यतन: लगता है जैसे मेरी लॉन्च एजेंट फ़ाइल का स्वामित्व होना चाहिए root:wheel। चांस लेने के बाद मैंने कोशिश की

sudo launchctl load ~/Library/LaunchAgents/retrmail.plist

और इसने कोई त्रुटि जारी नहीं की। और मुझे लगता है कि मेरा बहरापन ठीक से चल रहा है। मैं इस प्रश्न को खुला छोड़ दूंगा क्योंकि मुझे याद है कि लॉन्च किए गए दस्तावेज़ में स्पष्ट रूप से कहा गया है कि लॉन्च एजेंट फ़ाइल का स्वामित्व उपयोगकर्ता के पास हो सकता है।


UPDATE2: नहीं यह ठीक से नहीं चल रहा था। यह केवल एक बार चला, लेकिन फिर से नहीं, जैसे कि यह अनलोड किया गया था।


UPDATE3: मैंने योसेमाइट सार्वजनिक बीटा 3 में अपग्रेड किया, और अपने एजेंट को इसमें बदल दिया

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.darksair.retrmail</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/darksair/bin/retrmail.py</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>UserName</key>
    <string>darksair</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/darksair/logs/retrmail.log</string>
  </dict>
</plist>

मैंने इस एजेंट को पुनः लोड किया, और मुझे लगता है कि अब यह ठीक से काम कर रहा है। मैं अभी भी इस सवाल को खुला छोड़ रहा हूं क्योंकि मुझे नहीं पता कि मेरे पिछले हिस्से में क्या खराबी है।


अंत में, जो मैंने पाया वह मुझे root:wheelलोड करने के लिए प्लिस्ट के मालिक को बदलना है।


क्या यह योसमाइट फाइनल में काम करता है?
टीजे लुओमा

@TJLuoma: हाँ। जब तक जड़: पहिए का स्वामित्व होता है।
21

जवाबों:


21

से man launchctl

ध्यान दें कि प्रति-उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइलें (LaunchAgents) रूट (यदि वे / लाइब्रेरी / LaunchAgents में स्थित हैं) या उन्हें लोड करने वाले उपयोगकर्ता (यदि वे $ HOME / लाइब्रेरी / LaunchAgents में स्थित हैं) के स्वामित्व में होना चाहिए। सभी सिस्टम-वाइड डेमोंस (लॉन्चडैमन्स) को रूट के स्वामित्व में होना चाहिए। कॉन्फ़िगरेशन फ़ाइलों को समूह को अस्वीकार करना चाहिए और दुनिया लिखती है। ये प्रतिबंध सुरक्षा कारणों से लगे हैं, क्योंकि एक लॉन्च कॉन्फ़िगरेशन फ़ाइल के लिए लेखन क्षमता की अनुमति देता है जो एक निर्दिष्ट करने के लिए कि निष्पादन योग्य लॉन्च किया जाएगा।

फिक्स है

sudo chmod 600 /Library/LaunchDaemons/x.plist
sudo chown root /Library/LaunchDaemons/x.plist

2
"या उपयोगकर्ता उन्हें लोड कर रहा है" <- यह वह हिस्सा है जिसके साथ मुझे समस्या है।
मेट्रोविंड

2
मैं एक यूनिक्स लड़का नहीं हूं, लेकिन यह कहता है कि "समूह और दुनिया लिखता है"। चूंकि यह अभी भी पढ़ने की आवश्यकता हो सकती है, क्या यह नहीं होना चाहिए chmod 644?
जेसन

5

अजीब तरह से पर्याप्त sudoथा , का उपयोग करना आपकी समस्या थी। उपयोग करके sudo, आप अब स्वयं नहीं थे, इसलिए आप अपनी फ़ाइल के स्वामी नहीं थे। निकालें sudo, कमांड को दोहराएं और इसे ठीक लोड करना चाहिए। इसके लिए दार्शनिक दृष्टिकोण के लिए क्षमा करें।


4

समाधान मिल गया।

इस मामले में सही कमांड है

launchctl bootstrap gui/501 ~/Library/LaunchAgents/retrmail.plist

और उतारने के लिए,

launchctl bootout gui/501 ~/Library/LaunchAgents/retrmail.plist

पता नहीं क्यों launchctl loadजड़ की आवश्यकता होती है, लेकिन लोड / अनलोड वैसे भी पदावनत है।


मैन पेज बूटआउट को सूचीबद्ध करता है बूटकट नहीं। मुझे लगता है कि मेरे मशीन पर स्वतः पूर्ण हो गया क्योंकि यह बूटआउट से बूटकट में बदल जाता है।
स्टीव मोजर

@MetroWind मुझे कोड = 112 से ऊपर की कमांड वाली त्रुटि के लिए डोमेन नहीं मिल रहा है। इसके अनुरूप नहीं है। कोई सुराग ?
पराग बाफना

क्या आपको अभी भी chmod& की आवश्यकता है chown?
इटाची

@ इताची, नहीं। डिफ़ॉल्ट मालिक को छोड़ना और अनुमति ठीक होनी चाहिए।
मेट्रोविंड

@ParagBafna, मुझे यकीन नहीं है। शायद आपका यूआईडी 501 नहीं है?
मेट्रोविंड

3

इस में भी भाग गया, उपयोगकर्ता का उपयोग करने की कोशिश कर रहा है, न कि स्वामित्व वाली जड़। (जैसा कि एक करने में सक्षम होना चाहिए)

$ load ~/Library/LaunchAgents/com.blash.blah.plist
Could not find domain for 

मैं दूरस्थ रूप से इस मशीन में ssh-ed था, जबकि मैं कंसोल (हेडलेस) में लॉग इन नहीं था, जो कि मेरा मुद्दा लग रहा था - कम से कम उपयोगकर्ता द्वारा प्रबंधित सेवाओं की आवश्यकता है उपयोगकर्ता को मुख्य स्क्रीन पर लॉग इन किया गया है (मैं समाप्त कर रहा हूं) loggin-in रिमोट-मैनेजमेंट के माध्यम से क्योंकि यह एक हेडलेस मशीन है)

IMO, यदि आप चाहते हैं कि यह तब भी चले जब आप व्यक्तिगत रूप से अपने विकल्पों में लॉग इन करने के लिए नहीं हैं:

  • अपने खाते को स्वचालित रूप से लॉगिन करें (सुरक्षा निहितार्थ पर ध्यान दें, उपयोगकर्तानाम टैग के बिना भी जवाबों में से एक में नोट किया गया है)

  • विभिन्न सुझावों में नोट की गई फ़ाइलों को रूट करें (उपयोगकर्ता को आपके पास पहले से मौजूद उपयोगकर्ता नाम के साथ प्रभावी बनाना)


2
बहुत बहुत धन्यवाद। मैंने आपके उत्तर में हल ढूंढ लिया है।
रिट्रीट डे

2

यहाँ एक मूर्खतापूर्ण विचार है।

मेरे पास बस वही त्रुटि थी, जो योसमाइट में अपग्रेड होने के बाद भी थी। मैंने गलती से मान लिया था कि .plist फ़ाइल पर खराब स्वामित्व / अनुमतियाँ हैं, जब वास्तव में, किसी कारण से मैं बाइनरी (जिसे मेरे केस कैसेंड्रा में) संदर्भित कर रहा था, अपनी निष्पादन योग्य बिट खो दिया था।

chmod + x'ing ने इसे ठीक कर दिया।

शायद आपकी समस्या नहीं है, लेकिन एक शॉट के लायक हो सकता है :)


हालांकि यह मेरे मामले पर लागू नहीं होता है। मेरे निष्पादन योग्य के पास x अनुमति बिट है। लेकिन जवाब के लिए धन्यवाद वैसे भी। आशा है कि यह कुछ अन्य लोगों की मदद कर सकता है।
मेट्रोविंड

2

UserNameकुंजी और स्ट्रिंग निकालें ।

मुद्दा यह है कि UserNameकुंजी का उपयोग केवल तभी किया जा सकता है जब प्रक्रिया को रूट द्वारा शुरू किया गया हो। यह केवल जड़ के रूप में शुरू किया जा सकता है, अगर जड़ के स्वामित्व में है। मूल रूप से, इस प्रक्रिया को रूट द्वारा शुरू किया जाता है और फिर निर्दिष्ट उपयोगकर्ता को suid'ed किया जाता है। यदि आप चाहते हैं कि यह प्रक्रिया आपके अनुसार चले, तो अपने ~ / पुस्तकालय / LaunchAgents फ़ोल्डर में प्लिस्ट डालें और UserName कुंजी को हटा दें।


Zabbix_agend के लिए 'UserName' विकल्प को हटाने के बाद यह काम कर रहा है। धन्यवाद! - gist.github.com/chusiang/04db38f5173784e33b68
Chu-Saing Lai

अजीब ... यह अभी भी लोड नहीं होगा के बाद मैं "UserName" चीज को हटा दिया ...
MetroWind

1

क्या आप किसी ऐसे एजेंट को मैन्युअल रूप से पुनः लोड करने का प्रयास कर रहे थे जिसके पास उपयोगकर्ता की अनुमति थी? मुझे पूरी तरह से समझ में नहीं आता है कि इसमें से किसी की आवश्यकता क्यों है, लेकिन मेरा मानना ​​है कि आपको अपने उपयोगकर्ता डोमेन से संलग्न होने की आवश्यकता है (जो ऐसा लगता है कि जब आप रूट के रूप में चलते हैं तो आप संलग्न नहीं होते हैं)। मेरे लिए काम करने के लिए इन कार्यों का उपयोग करना।

function as_user {
    local user="$1"
    local user_pid=$(ps -axj | awk "/^$user / {print \$2;exit}")
    local command="sudo launchctl bsexec $user_pid sudo -u '$user' $2"
    echo "Running:"
    echo "$command"
    eval $command
}

function as_current_user {
    as_user "$(whoami)" "$*"
}

function reload_agent {
    as_current_user launchctl unload "$1"
    as_current_user launchctl load "$1"
}

आप इसका उपयोग इस प्रकार करेंगे:

reload_agent ~/Library/LaunchAgents/com.hw.helloworld.plist

Bsexec आपको अपने डोमेन में वापस रखता है, और आपको कार्य को उपयोगकर्ता के प्रशंसापत्र के रूप में जोड़ने देता है।


यह कहता है: /Users/darksair/Library/LaunchAgents/retrmail.plist: पहले से ही प्रगति में है। इस बिंदु पर मेरे प्रश्न मूल रूप से हैं: किकस्टार्ट कमांड काम क्यों नहीं किया? और मुझे मूल स्वामित्व को जड़ तक क्यों स्थापित करना है ...?
मेट्रोविंड

1
आपको रूट होने के लिए अपनी फ़ाइल का स्वामी सेट नहीं करना चाहिए; ~ / लाइब्रेरी / LaunchAgents में सब कुछ उपयोगकर्ता के स्वामित्व में होना चाहिए, जिसके पास वह निर्देशिका है। जब मुझे लोड करने से पहले मैंने कमांड को अनलोड नहीं किया तो मुझे ऑपरेशन पहले से ही चालू था। क्या आप मेरे द्वारा प्रदान किए गए फ़ंक्शन का उपयोग कर रहे हैं?
imalison

हाँ। मैं आपके कार्यों का उपयोग कर रहा था। और मैंने पहले
प्लास्ट

मैंने सिर्फ आपके द्वारा प्रदान की गई पहली प्लीट लोड करने की कोशिश की और यह मेरे लिए काम कर गया। फ़ाइल के लिए क्या अनुमतियाँ निर्धारित हैं?
imalison

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