Başlangıçta / oturum açmada çalıştır komutu (Mac OS X)


53

Bu bash komutunu hangi dosyaya yerleştirmem gerektiğini merak ettim, böylece başlangıçta çalıştırılacak.

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

Ben net ovma ve aralarında olduğunu düşünüyorum edilmiştir ~/.bashrc, ~/profile, /etc/bashrc, /etc/profileveya ~/.bash_profile. Bunları denedim ve terminal başlangıcında çalışıyor gibi gözükse de Mac başlangıç değil . Bir dosyayı mı özlüyorum?

Yanıtlar:


33

Resmen bunların hiçbiri. Apple önerilen şekilde fırlatmayı kullanmaktır . Bunu ayarlamak için Guis lingon ve Launch Control içerir

Bahsettiğiniz dosyalara gelince, ~ / .bashrc, ~ / profile, ~ / .bash_profile giriş dizinindeki dosyaları sadece bir terminal aracılığıyla giriş yaptığınızda başlar. / Etc olanlar ev dizininde olanlar ama sadece kullanıcı giriş yapılır .. önce tüm kullanıcılar için başlangıç kabuk tarafından çalıştırılır bash kılavuzuna

Unix başlangıç ​​betiği / etc / rc * ile ilgilidir, ancak OSX için yalnızca launchd öğesini kullanın


1
Öyleyse benim /etckomutum dosyalardan birine eklenirse açılışta çalıştırılmalı mı? İçinde ne olduğu önemli mi?
Wolfy87

1
/etc/bashrcve bir kabuk başlattığınızda çalıştırılır, tıpkı tıpkı ~/.bashrc- tıpkı bir kullanıcı bir kabuk başlattığında, sadece sizin kullanıcınızdan ziyade birincisinin çalıştırılacağıdır .
Scott

@Scott doğru Cevabımı düzelttim
user151019

4
Tamam, ancak fırlatmanın nasıl kullanılacağını çözemiyorum, programım için bir plist dosya oluşturmaya çalıştım ama nasıl çalıştıracağımı veya önyüklemesinde nasıl çalıştıracağını bilmiyordum.
Wolfy87

1
@ Başlat "bağlantısının" bağlantısı koptu :(
Artem

58

OS X'te başlatma sırasında bir komut çalıştırmak için kullanmanız gerekir launchd.

Lingon kullanmak istemiyorsanız , bir launchdEmlak Listesi oluşturmanız gerekir . Bu bir XML dosyasıdır, bu nedenle en sevdiğiniz metin düzenleyicinizle yapabilir veya alternatif olarak Mac OS X Dev Tools ile birlikte yüklenen Özellik Listesi Düzenleyicisini kullanabilirsiniz. Aşağıdakileri oluşturun:

<?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>

Bunu kaydedin /Library/LaunchAgents/some.meaningful.name.plist(bir yönetici hesabına ve / veya ihtiyacınız olacak sudo), ardından bir terminal açın ve şunları yapın:

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

Bu, fırlatma işleminin MongoDB'yi açılışta başlatmasına neden olacak öğeyi yüklemesine neden olacaktır. Bir bonus olarak, launchdonu izleyecek ve herhangi bir nedenle çıkarsa, yeniden başlatılacaktır. Öğeden kurtulmak için, yukarıdaki komuttaki yükü boşaltma ile değiştirmeniz yeterlidir.


1
Bu sayfa ( developer.apple.com/library/mac/documentation/Darwin/Reference/… ) lansman tarafından başlatılan bir şeyin yapmaması gereken birçok şeyi listeler. Eğer başlangıçta rasgele bir komut çalıştırmak istersem kontrolü elimde olmayabilir ve komut bu gibi şeyleri ortadan kaldırabilir. Ek olarak, fırlatmanın yeniden başlatılmasını ve bir defaya mahsus olmaktan veya durdurulan öğenin yeniden başlatılmasını istemeyebilirim. Bu durumlarda ne yapmalıyım?
Michael

@Scott, teşekkür ederim. İnternette bulduğum en yararlı cevap bu.
Dmitriy

5
Bu, her 10 saniyede bir uygulamayı çalıştırmayı dener; bu, ölmeyen hizmetler için işe yarar. Bu vaktinde bir kez çalışır (benim durumumda, yeniden başlatmada Slack kez mesajlaşma) bir komut dosyası için ise eklemek <key>LaunchOnlyOnce</key><true/>dict.
msanford

Harika nokta, Bay Sanford. Vazgeçmeyen launchd, Mac'inizi yavaşlatan büyük günlük dosyaları oluşturur (sürekli olarak bu büyük günlük dosyalarını okumak ve yazmaktan dolayı). Bu düzeltmeyi bilgisayarımda çalışan kötü yazılmış ticari yazılımların bazılarında kullanabilirim.
Foliovision

1
Kendine Not: Ortam değişkenlerini gerekirse: serverfault.com/questions/111391/...
ikilem

48

Yığın Taşması'ndan başka basit bir çözüm : Yapabilecekleriniz:

  • Automator.app'yi başlatın;
  • "Uygulama" yı seçin;
  • Araç çubuğunda "Kitaplığı göster" i tıklayın (gizlenmişse);
  • "Run shell script" (Eylemler / Yardımcı Programlar'dan) ekleyin;
  • Komut dosyanızı kopyalayıp pencereye yapıştırın;
  • Dene;
  • Bir yere kaydedin: denilen bir dosya your_name.appoluşturulacak);
  • MacOSX sürümünüze bağlı olarak:
    • Eski sürümler: Sistem Tercihleri ​​→ Hesaplar → Giriş öğeleri veya
    • Yeni sürüm: Sistem Tercihleri ​​→ Kullanıcılar ve Gruplar → Giriş öğelerine git (sağ üst);
  • Bu yeni oluşturulan uygulamayı ekle;

Oturumu kapatın, tekrar oturum açın ve işlemi yapmanız gerekir. ;)


2
Test edildi ve çalışıyor ve piyasaya sürülmemiş hantal bir düzenleme ve ücretli Lingon uygulaması gerektirmiyor.
Lukasz

4
Bununla birlikte, üç satırlı kabuk kodunuza yaklaşık 1804k kazan plakası ekler!
android.weasel

1
Automator ile faydalı bir şeyler yapmayla ilgili ayrıntılı talimatlar için teşekkür ederiz. Bu sadece bir görevde değil, bana da yardımcı olacak. Nazikçe Jaime teşekkür ederim. Turbo Boost Switcher üzerinden Turbo Boost'u kapatmak için kullanıyorum. Ücretli sürüm sahibiyim ancak lisanslama teknisyeni yeterince kötüydü, her uyanıştan sonra yönetici şifresi taleplerini önlemek için terminal üzerinden başlatmayı gerektiren ücretsiz sürümü kullanmayı tercih ediyorum.
Foliovision

1
@ android.weasel Bkz. Geekarist'in cevabı superuser.com/a/995564/255375
JD

Süper-ful :-D, +1
Mukul Goel

28

Giriş yaparken komutları başlatmak için şunu yapabilirsiniz:

  • Komutlarınızı içeren bir metin dosyası oluşturun (bash betiği):

    #!/bin/bash
    
    # Start the MongoDB server
    /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log
    
  • Bu dosyayı kaydet ~/Library/Startup.cmd

  • Finder'da dosyayı çift tıklatarak test edebilirsiniz.
  • Çalıştırılabilir yap: chmod +x ~/Library/Startup.cmd
  • Bu dosyayı Sistem Tercihleri> Hesaplar> Giriş öğelerine ekleyin

3
en iyi ve en kolay cevap imho. kabul edilen çözümden çok daha kolay. Sistem Tercihleri> Kullanıcılar ve Gruplar> Giriş öğeleri ... (Hesaplar değil) ... olduğunu ve ayrıca dosyanın herhangi bir yerde olabileceğini, bunun da .cmd ile bitmesi gerekmediğini unutmayın. Sadece chmod + x.
foreyez,

5
Ancak, giriş öğeleri sistem başlangıcında değil giriş sırasında çalışır. Bir sunucu çalıştırıyorsanız, bu büyük bir fark.
not2savvy

Haklısın @ not2savvy. Bir sunucu için @ Sridhar-Sarnobat'ın cevabını tavsiye ederim @reboot. Ancak cevabım grafiksel bir program başlatmayı sağlayacaktır, bu yüzden faydalı olduğunu düşünüyorum.
Geekarist

Neden cmdyerine bitiyor sh?
Simin Jie

3

MacOS'ta nasıl çalışacağınıza launchdve launchctlçalışacağınıza bakmalısınız . Her iki komut için man sayfalarını okuyarak başlayabilirsiniz. Daha sonra içeriye bakabilir /Library/LaunchAgents/ve /Library/LaunchDaemons/uygulamaların farklı zamanlarda launchctlarayüz üzerinden yüklenecek uygulamaları nasıl ayarlayacağınızı görebilirsiniz .

İşte size daha fazla yardımcı olabilecek Yığın Taşması'nda bulduğum bir örnek .



0

Bu sorunun çok basit bir unix cevabı ilgimi çekti ve başka bir sitede buldum . İşte çözümün bir özeti.

Oturum açma kabukları için standart her zaman adında "profile" olan bash yapılandırma dosyalarını şu sırayla aramaktır: / etc / profile, ~ / .bash_profile, sonra ~ / .bash_login ve son olarak ~ / .profile. Giriş kabukları çıktığında, ~ / .bash_logout dosyasını okurlar.

Benim durumumda ~ / .bash_profile dosyasını henüz oluşturdum ve ardından Mac Terminal uygulaması için tercihleri ​​açtım ve "Shell ile birlikte açılıyor" seçeneğini varsayılandan / bin / bash olarak değiştirdim. Bu kadar. Temiz ve basit.


-3

açık terminal, tip

nano ~/.bash_profile

daha sonra bu metni dosyaya ekleyin:

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

3
Bu, oturum açtıktan sonra bir Terminal penceresi açacağınızı varsayar.
Arjan,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.