Yosemite पर स्टार्टअप पर चलने के लिए शेल स्क्रिप्ट कैसे प्राप्त करें


21

स्टार्टअप आइटम के लिए सिस्टम / लाइब्रेरी में एक निर्देशिका है जो मैं मानता हूं: स्टार्टअप

मुझे एक शेल स्क्रिप्ट की आवश्यकता है जो स्थानीय नेटवर्क पते और सबनेट मास्क के साथ स्टार्ट अप पर ईथरनेट इंटरफेस कॉन्फ़िगर करेगी। मुझे ऐसा करने की आवश्यकता है क्योंकि ईथरनेट इंटरफ़ेस को कॉन्फ़िगर करने के लिए नेटवर्क प्राथमिकताएं मैन्युअल सेटिंग्स का उपयोग करके इसे सेट नहीं करेंगी। यह एक गंभीर बग प्रतीत होता है, या मेरी स्थापना खराब है।

मुझे कमांड लाइन से नेटवर्कसेटअप का उपयोग करने की सलाह दी गई थी, लेकिन यह ईथरनेट इंटरफेस को इस तरह से कॉन्फ़िगर नहीं करेगा कि रिबूट पर कॉन्फ़िगरेशन हो।

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

(मेरे पास टर्मिनल में अपना रास्ता खोजने के लिए FreeBsd और Linux के साथ पर्याप्त अनुभव है, लेकिन जरूरी नहीं कि यह OS OS पर लागू हो)

जवाबों:


18

इसे करने का एक तरीका स्क्रिप्ट को एक लॉन्च सेवा प्रदान करना होगा:

हमेशा की तरह शेल स्क्रिप्ट बनाएं। फिर आप इसे स्टार्टअप पर चलाने के लिए एक लॉन्च सेवा बना सकते हैं। उन पर स्थित हैं /Library/LaunchDaemons। ये XML संपत्ति सूची प्रारूप में हैं। एक और बनाएं और इसे कुछ इस तरह से आबाद करें:

<?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>com.example.app</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>/path/to/script</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
    </dict>
</plist>

बदलें com.example.app, /bin/shऔर /path/to/scriptआवश्यकतानुसार।

स्क्रिप्ट तब चलेगी जब सिस्टम बूट हो रहा है। यदि यह बहुत जल्दी चलता है, तो आप या तो प्रयास करने के लिए स्क्रिप्ट लिख सकते हैं और इसे तब तक कर सकते हैं जब तक कि यह सफल न हो जाए, या इसे गैर-शून्य त्रुटि कोड के साथ बाहर निकलें और </dict>लाइन से पहले संपत्ति सूची में जोड़ें :

<key>KeepAlive</key>
<dict>
     <key>SuccessfulExit</key>
     <false/>
</dict>

ओएस एक्स लांच डेमॉन और सेवाओं के बारे में अधिक के लिए, मैं सुझाव देते हैं यहां , या उन्हें बनाने के लिए एक अच्छा त्वरित संदर्भ के लिए यहाँ launchd क्या कर सकते हैं पर अधिक व्यापक संदर्भ के लिए।


आप इस दस्तावेज़ को क्या कहते हैं? और क्या / पथ / से / स्क्रिप्ट == / प्रणाली / पुस्तकालय / स्टार्टअप / स्क्रिप्ट / है?
जेफके

1
पहले प्रश्न के लिए: plist दस्तावेज़ का नाम आम तौर पर एक .plist एक्सटेंशन के साथ संपत्ति सूची में लेबल कुंजी (इस मामले में, "com.example.app") पर सेट होता है।
andonuts

1
दूसरे प्रश्न के लिए: यह सही है, लेकिन स्क्रिप्ट को कहीं और ले जाना चाहिए।
andonuts

आपकी याद्दाश्त विकृत है। आपको एक कुंजी की आवश्यकता है: <key>Program</key>मूल्य के साथ <string>/bin/sh</string>और फिर <key>ProgramArguments</key>बस मूल्य होना चाहिए<string>/path/to/script</string>
जॉन ब्रूक्स

वास्तव में, मेरा भी गलत है: <key>ProgramArguments</key>एक सरणी की जरूरत है ..
जॉन ब्रूक्स

16

कुछ समय पहले मैंने क्रोन का इस्तेमाल किया था। आप इस तरह एक प्रविष्टि कर सकते हैं

@reboot /path/to/my/script

अधिक जानकारी यहाँ

पहले पाँच क्षेत्रों के बजाय, आठ विशेष तारों में से एक दिखाई दे सकता है:

       string          meaning
       ------          -------@reboot ------@reboot
       @reboot         Run once, at startup.
       @yearly         Run once a year, "0 0 1 1 *".
       @annually       (same as @yearly)
       @monthly        Run once a month, "0 0 1 * *".
       @weekly         Run once a week, "0 0 * * 0".
       @daily          Run once a day, "0 0 * * *".
       @midnight       (same as @daily)
       @hourly         Run once an hour, "0 * * * *".

1
जानने के लिए बहुत आसान है!
जियोथैरी

7
cronइन दिनों OS X पर ऐसा करने का सही तरीका नहीं है। इसके बजाय LaunchAgent या LaunchDeamon का उपयोग करें (लॉन्च)। अधिक जानकारी के लिए: developer.apple.com/library/mac/documentation/MacOSX/Conceptual/… Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.
CousinCocaine

4
cronlaunchdहालांकि से कॉन्फ़िगर करने के लिए बहुत आसान है । इस धागे में दो उत्तरों की तुलना करके देखें कि मेरा क्या मतलब है। cronएक एकल फ़ाइल में एक ही लाइन लेता है, जहां आपको launchdउस स्क्रिप्ट का वर्णन करने के लिए एक स्क्रिप्ट की आवश्यकता होती है जिसे आप बूट पर चलाना चाहते हैं।
18

@ डनीड क्रोन नकल, कतार बफ़रिंग और अन्य को चलाने के लिए संवेदनशील नहीं है। हालांकि इस मामले में व्यवहार्य है, यह हमेशा एक कंकाल कुंजी नहीं है, और न ही यह एक मुहावरेदार समाधान है।
न्यू अलेक्जेंड्रिया

Crontab रास्ता बेहतर है। यह त्वरित और गंदा और लंबे समय तक यूनिक्स दुनिया में स्थापित है। मैंने इस @reboot कीवर्ड को पूरी तरह से खोद डाला।
मैकटव

-3

लॉगिन हुक स्क्रिप्ट पर एक नज़र डालें।

https://wiki.afp548.com/index.php/Login/Logout_Hooks_in_OS_X


1
एक लॉगिन हुक लॉगिनविंडो.app द्वारा शुरू किया गया है जो स्टार्टअप पर स्क्रिप्ट चलाने के समान नहीं है।
fd0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.