स्टार्टअप / लॉगिन पर कमांड चलाएँ (Mac OS X)


53

मैं सोच रहा था कि इस बैश कमांड को मुझे किस फाइल पर रखना चाहिए, ताकि इसे स्टार्टअप पर चलाया जा सके।

# Start the MongoDB server
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log

मैं शुद्ध परिशोध किया गया है और लगता है कि यह है के बीच ~/.bashrc, ~/profile, /etc/bashrc, /etc/profileया ~/.bash_profile। हालांकि मैंने ये कोशिश की है और वे मैक स्टार्टअप नहीं बल्कि टर्मिनल स्टार्टअप पर चलते हैं । क्या मुझे कोई फ़ाइल याद आ रही है?

जवाबों:


33

आधिकारिक तौर पर इनमें से कोई भी नहीं। Apple ने सुझाव दिया कि लॉन्च का उपयोग करें । इसे सेट करने के लिए Guis में lingon और Launch Control शामिल हैं

उन फ़ाइलों के लिए, जिनका आप होम डायरेक्टरी में उल्लेख करते हैं ~ / .bashrc, ~ / profile, ~ / .bash_profile केवल तभी शुरू होता है जब आप किसी टर्मिनल के माध्यम से लॉगिन करते हैं। इन / वगैरह शेल द्वारा चलाए जा रहे हैं, जो सभी उपयोगकर्ताओं के लिए होम डायरेक्टरी से पहले शुरू होते हैं, लेकिन केवल तभी जब कोई उपयोगकर्ता लॉगिन करता है .. मैनुअल को बैश करता है।

यूनिक्स स्टार्टअप स्क्रिप्ट शामिल / आदि / आरसी * लेकिन OSX के लिए सिर्फ लॉन्च सामान का उपयोग करें


1
तो अगर मेरी कमांड को किसी भी फाइल में डाला गया है तो /etcउसे बूटअप पर चलाया जाना चाहिए? क्या यह मायने रखता है कि यह किस में है?
वुल्फ्या 87

1
/etc/bashrcऔर जब आप एक शेल शुरू करते हैं तो रन किए जाते हैं, जैसे ~/.bashrc- यह सिर्फ इतना है कि पूर्व चलाया जाएगा जब भी कोई उपयोगकर्ता केवल अपने उपयोगकर्ता के बजाय एक शेल शुरू करता है।
स्कॉट


4
ठीक है, लेकिन मैं सिर्फ लॉन्च का उपयोग करने के तरीके से काम नहीं कर सकता, मैंने अपने कार्यक्रम के लिए एक फ़ाइल बनाने की कोशिश की, लेकिन मुझे नहीं पता कि इसे कैसे चलाना है या इसे बूट पर चलाने के लिए कैसे प्राप्त करना है।
वुल्फ्या 87

1
@ लॉन्च "लिंक" को तोड़ दिया गया है :(
आर्टेम

58

OS X पर स्टार्ट अप पर कमांड चलाने के लिए, आपको उपयोग करने की आवश्यकता है launchd

यदि आप लिंगोन का उपयोग नहीं करना चाहते हैं , तो आपको एक launchdसंपत्ति सूची बनाने की आवश्यकता है । यह एक XML फ़ाइल है, इसलिए आप इसे अपने पसंदीदा पाठ संपादक के साथ कर सकते हैं या वैकल्पिक रूप से आप मैक ओएस एक्स देव टूल्स के साथ स्थापित संपत्ति सूची संपादक का उपयोग कर सकते हैं। निम्नलिखित बनाएँ:

<?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>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->

    <key>OnDemand</key>
    <false/>

    <key>UserName</key>
    <string>anAppropriateUser</string>

    <key>GroupName</key>
    <string>anAppropriateGroup</string>

    <key>ProgramArguments</key>
    <array>
            <string>/Applications/MongoDB/bin/mongod</string>
            <string>--dbpath</string>
            <string>/usr/local/mongo/data</string>
            <string>--fork</string>
            <string>--logpath</string>
            <string>/usr/local/mongo/log</string>
    </array>
</dict>
</plist>

इसमें सहेजें /Library/LaunchAgents/some.meaningful.name.plist(आपको एक व्यवस्थापक खाते और / या sudo) की आवश्यकता होगी , फिर एक टर्मिनल खोलें और करें:

sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist

यह उस आइटम को लोड करने के लिए लॉन्च का कारण बनेगा जो बूट पर MongoDB शुरू करने का कारण बनेगा। एक बोनस के रूप में, launchdइसकी निगरानी करेगा और, यदि यह किसी भी कारण से बाहर निकलता है, तो इसे फिर से शुरू किया जाएगा। आइटम से छुटकारा पाने के लिए बस उपरोक्त कमांड में लोड को अनलोड के साथ बदलें।


1
यह पृष्ठ ( developer.apple.com/library/mac/documentation/Darwin/Reference/… ) लॉन्चड द्वारा की जाने वाली कुछ चीजों को सूचीबद्ध नहीं करता है। यदि मैं स्टार्टअप पर एक मनमाना कमांड चलाना चाहता हूं तो मेरे पास नियंत्रण नहीं हो सकता है और कमांड उन चीजों को कर सकता है। इसके अलावा, मैं लॉन्च को फिर से शुरू और आइटम के लिए नहीं चाहता हूं जो बंद हो जाता है क्योंकि यह एक-बंद है या अपने दम पर फिर से लॉन्च करना संभालता है। इन मामलों में मुझे क्या करना चाहिए?
माइकल

@ सच, ​​धन्यवाद। यह सबसे उपयोगी उत्तर है जो मुझे इंटरनेट पर मिला।
दिमित्री 15

5
यह हर 10 सेकंड में एप्लिकेशन को चलाने का प्रयास करेगा, जो कि मरने वाली सेवाओं के लिए अच्छी तरह से काम करता है। यदि यह एक ऐसी स्क्रिप्ट के लिए है जो एक बार समय पर चलती है (मेरे मामले में, एक बार स्लैक ऑन रिबूट) संदेश <key>LaunchOnlyOnce</key><true/>को तानाशाही से जोड़ते हैं ।
एमएसनफोर्ड

महान बिंदु श्री सैनफोर्ड। लॉन्चड जो हार नहीं मानता है वह बड़ी लॉग फाइलें बनाता है जो तब आपके मैक को धीमा कर देता है (लगातार इतनी बड़ी लॉग फाइल पढ़ने और लिखने के कारण)। मैं अब अपने कंप्यूटर पर चल रहे कुछ बुरी तरह से लिखे गए कमर्शियल सॉफ्टवेयर पर उस फिक्स का उपयोग कर सकता हूं।
फोलोविज़न

1
आत्म करने के लिए नोट: यदि आप वातावरण चर की जरूरत है: serverfault.com/questions/111391/...
व्याकुलता

48

स्टैक ओवरफ्लो से एक और सरल उपाय : आप कर सकते हैं:

  • Automator.app शुरू करें;
  • "एप्लिकेशन" चुनें;
  • टूलबार में "लाइब्रेरी दिखाएं" पर क्लिक करें (यदि छिपा हुआ है);
  • "रन शेल स्क्रिप्ट" जोड़ें (क्रियाओं / उपयोगिताओं से);
  • अपनी स्क्रिप्ट को विंडो में कॉपी-पेस्ट करें;
  • झसे आज़माओ;
  • इसे कहीं सहेजें: नामक एक फ़ाइल your_name.appबनाई जाएगी);
  • आपके MacOSX संस्करण पर निर्भर करता है:
    • पुराने संस्करण: सिस्टम वरीयताएँ → खाते → लॉगिन आइटम, या
    • नया संस्करण: सिस्टम वरीयताएँ → उपयोगकर्ता और समूह → लॉगिन आइटम (शीर्ष दाएं) पर जाएं;
  • इस नए बनाए गए ऐप को जोड़ें;

लॉग ऑफ, लॉग इन करें और आपको किया जाना चाहिए। ;)


2
परीक्षण किया और काम करता है और इसे लॉन्चड बोझिल प्लिस्ट संपादन की आवश्यकता नहीं होती है और न ही लिंगोन ऐप का भुगतान किया जाता है।
लुकज

4
हालांकि, यह आपके तीन लाइन शेलस्क्रिप्ट में लगभग 1804k बॉयलरप्लेट जोड़ता है!
Android.weasel

1
ऑटोमेकर के साथ कुछ उपयोगी बनाने के लिए विस्तृत निर्देशों के लिए धन्यवाद। इससे मुझे सिर्फ एक काम में मदद नहीं मिलेगी। शुक्रिया जयम। मैं टर्बो बूस्टर स्विचर के माध्यम से टर्बो बूस्ट को बंद करने के लिए इसका उपयोग कर रहा हूं। मेरे पास भुगतान संस्करण है, लेकिन लाइसेंसिंग मैकेनिक काफी भयानक हैं मैं नि: शुल्क संस्करण का उपयोग करना पसंद करता हूं, जो नींद से हर जागरण पर व्यवस्थापक पासवर्ड के अनुरोध से बचने के लिए टर्मिनल के माध्यम से लॉन्च की आवश्यकता होती है।
फोलोविज़न

1
@ android.weasel देखिए गीकेरिस्ट का जवाब superuser.com/a/995564/255375
JD

सुपरस्यूज़-फ़ुल :-D, +1
मुकुल गोयल

28

लॉग इन करते समय कमांड लॉन्च करने के लिए, आप यह कर सकते हैं:

  • एक पाठ फ़ाइल बनाएं जिसमें आपके कमांड हों (स्क्रिप्ट को दबाएं):

    #!/bin/bash
    
    # Start the MongoDB server
    /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log
    
  • इस फाइल को सेव करें ~/Library/Startup.cmd

  • फाइंडर में फाइल को डबल क्लिक करके आप इसे टेस्ट कर सकते हैं
  • इसे निष्पादित करें: chmod +x ~/Library/Startup.cmd
  • इस फ़ाइल को सिस्टम वरीयताएँ> खाते> लॉगिन आइटम में जोड़ें

3
सबसे अच्छा और आसान जवाब imho। स्वीकृत समाधान की तुलना में बहुत आसान है। ध्यान दें कि यह सिस्टम वरीयताओं में है> उपयोगकर्ता और समूह> लॉगिन आइटम ... (लेखा नहीं) ... और यह भी ध्यान दें कि फ़ाइल कहीं भी हो सकती है, .cmd के साथ समाप्त नहीं होती है। बस chmod + x इसे।
foreyez

5
हालाँकि, लॉगिन आइटम लॉगिन पर चलते हैं, सिस्टम स्टार्टअप पर नहीं। यदि आप एक सर्वर चलाते हैं, तो यह एक बड़ा अंतर है।
not2savvy

आप सही हैं @ not2savvy। एक सर्वर के लिए मैं श्रीधर-सरनोबत के जवाब की सिफारिश करूंगा @reboot। हालांकि मेरा जवाब एक ग्राफिकल कार्यक्रम शुरू करने की अनुमति देगा, इसलिए मुझे लगता है कि यह उपयोगी है।
गीकेस्ट

के cmdबजाय के साथ समाप्त क्यों होता है sh?
सिमिन जी

3

आपको यह देखना होगा कि मैकओएस कैसे launchdऔर कैसे launchctlकाम करता है। आप दोनों कमांड के लिए मैन पेज पढ़कर शुरू कर सकते हैं। तब आप इंटरफ़ेस के माध्यम से अलग-अलग समय पर लोड करने के लिए एप्लिकेशन सेट करने के तरीके के अंदर /Library/LaunchAgents/और /Library/LaunchDaemons/उदाहरण देख सकते हैं launchctl

यहां एक उदाहरण मैंने स्टैक ओवरफ्लो पर पाया है जो आगे आपकी मदद कर सकता है।


3

यदि आप एक दृष्टिकोण चाहते हैं जो लिनक्स और मैक ओएस एक्स पर काम करेगा, तो एक क्रोन कार्य पर्याप्त होना चाहिए (निष्पादन द्वारा अपने क्रॉन कार्यों को संपादित करें crontab -e):

@reboot /path/to/script

(क्रेडिट: https://unix.stackexchange.com/questions/49207/how-do-i-set-a-script-that-it-will-run-on-start-up-in-freebsd )


0

मैं इस समस्या के लिए एक बहुत ही सरल यूनिक्स उत्तर में रुचि रखता था और इसे किसी अन्य साइट पर पाया । यहाँ समाधान का एक सारांश है।

लॉगिन गोले के लिए मानक हमेशा इस क्रम में "प्रोफ़ाइल" के साथ बैश कॉन्फ़िगरेशन फ़ाइलों की तलाश में है, इस क्रम में: / etc / प्रोफ़ाइल, ~ / .bash_profile, फिर ~ / .bash_login और अंत में ~ / .profile। जब लॉगिन गोले बाहर निकलते हैं, तो वे ~ / .bash_logout पढ़ते हैं।

मेरे मामले में मैंने सिर्फ ~ / .bash_profile बनाया और फिर मैंने मैक टर्मिनल ऐप के लिए प्राथमिकताएँ खोलीं और डिफ़ॉल्ट से / बिन / बैश में "शेल ओपन" विकल्प को बदल दिया। बस। साफ और सरल।


-3

खुला टर्मिनल, टाइप करें

nano ~/.bash_profile

फिर इस पाठ को फ़ाइल में जोड़ें:

/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork logpath /usr/local/mongo/log

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