2011-01-06 11:24:35 +0000 2011-01-06 11:24:35 +0000
56
56

Uruchamianie polecenia przy starcie / logowaniu (Mac OS X)

Zastanawiałem się, w którym pliku powinienem umieścić tę komendę bash, aby była uruchamiana przy starcie systemu.

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

Przeszukałem sieć i myślę, że jest to pomiędzy ~/.bashrc, ~/profile, /etc/bashrc, /etc/profile lub ~/.bash_profile. Chociaż próbowałem ich i wydają się działać na terminal startup nie Mac startup. Czy brakuje mi jakiegoś pliku?

回答 (8)

60
60
60
2011-01-06 12:50:04 +0000

Aby uruchomić polecenie przy starcie na OS X, musisz użyć launchd.

Jeśli nie chcesz używać Lingon , musisz utworzyć Listę właściwości launchd. Jest to plik XML, więc możesz to zrobić za pomocą swojego ulubionego edytora tekstu lub alternatywnie możesz użyć edytora Property List Editor, który jest instalowany z Mac OS X Dev Tools. Utwórz następujące elementy:

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

Zapisz to w /Library/LaunchAgents/some.meaningful.name.plist (będziesz potrzebował konta administratora i/lub sudo), a następnie otwórz terminal i wykonaj:

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

To spowoduje, że launchd załaduje element, który spowoduje, że uruchomi MongoDB przy starcie. Jako bonus, launchd będzie go monitorował i jeśli z jakiegoś powodu zakończy pracę, zostanie ponownie uruchomiony. Aby pozbyć się tego elementu po prostu zamień load w powyższej komendzie na unload.

51
51
51
2012-08-23 18:09:02 +0000

Kolejne proste rozwiązanie ze Stack Overflow ](https://stackoverflow.com/a/6445525/403616): Możesz:

  • Uruchomić Automator.app;
  • Wybrać “Aplikację”;
  • Kliknąć “Pokaż bibliotekę” na pasku narzędzi (jeśli jest ukryta);
  • Dodać “Uruchom skrypt powłoki” (z Actions/Utilities);
  • Skopiować i wkleić swój skrypt do okna;
  • Przetestować go;
  • Zapisać go gdzieś: powstanie plik o nazwie your_name.app);
  • W zależności od wersji MacOSX:
  • Stare wersje: Przejdź do Preferencje systemowe → Konta → Elementy logowania, lub
  • Nowa wersja: Przejdź do Preferencje systemowe → Użytkownicy i grupy → Elementy logowania (u góry po prawej);
  • Dodaj tę nowo utworzoną aplikację;

Wyloguj się, zaloguj ponownie i powinieneś być gotowy ;)

35
35
35
2011-01-06 11:37:23 +0000

Oficjalnie żaden z nich. Sposób sugerowany przez Apple to użycie launchd . Wskazówki do skonfigurowania tego zawierają lingon i Launch Control

Jeśli chodzi o pliki, o których wspominasz, te w katalogu domowym ~/.bashrc, ~/profile, ~/.bash są uruchamiane tylko wtedy, gdy logujesz się przez terminal. Te w /etc są uruchamiane przez powłokę dla wszystkich użytkowników przed tymi w katalogu domowym, ale tylko wtedy, gdy użytkownik się zaloguje… Uniksowy skrypt startowy zawiera /etc/rc*, ale dla OSX wystarczy użyć launchd.

30
30
30
2015-11-03 17:53:47 +0000

Aby uruchomić komendy podczas logowania, możesz zrobić tak:

  • Utworzyć plik tekstowy zawierający Twoje polecenia (skrypt basha):

  • Zapisać ten plik w katalogu ~/Library/Startup.cmd

  • Możesz go przetestować, klikając dwukrotnie plik w Finderze

  • Uczynić go wykonywalnym: chmod +x ~/Library/Startup.cmd

  • Dodaj ten plik w Preferencjach systemowych > Konta > Elementy logowania.

3
3
3
2016-03-24 19:58:03 +0000

Jeśli chcesz podejścia, które będzie działać na Linux & Mac OS X, zadanie cron powinno być wystarczające (edytuj swoje zadania cron wykonując crontab -e):

@reboot /path/to/script

(credits: https://unix.stackexchange.com/questions/49207/how-do-i-set-a-script-that-it-will-run-on-start-up-in-freebsd )

3
3
3
2011-01-06 11:32:48 +0000

Będziesz musiał sprawdzić, jak launchd i launchctl działają w systemie MacOS. Możesz zacząć od przeczytania stron podręcznika man dla obu poleceń. Następnie możesz poszukać w /Library/LaunchAgents/ i /Library/LaunchDaemons/ przykładów, jak skonfigurować aplikacje, aby ładowały się o różnych porach poprzez interfejs launchctl. Tutaj jest przykład znalazłem na Stack Overflow, który może ci pomóc dalej.

0
0
0
2018-05-22 16:37:28 +0000

Zainteresowała mnie bardzo prosta unixowa odpowiedź na ten problem i znalazłem ją na innej stronie . Oto podsumowanie rozwiązania.

Standardem dla powłok logowania jest zawsze szukanie plików konfiguracyjnych basha z “profilem” w nazwie, w takiej kolejności: /etc/profile, ~/.bashprofile, następnie ~/.bashlogin i na końcu ~/.profile. Kiedy powłoki logowania kończą pracę, czytają ~/.bash_logout.

W moim przypadku po prostu utworzyłem ~/.bash_profile, a następnie otworzyłem preferencje aplikacji Mac Terminal i zmieniłem opcję “Shell opens with” z domyślnej na /bin/bash. To wszystko. Czyste i proste.

-3
-3
-3
2017-03-11 07:25:05 +0000

otwórz terminal, wpisz

nano ~/.bash_profile

następnie dodaj ten tekst do pliku:

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