Jak mogę uruchomić / zatrzymać / ponownie uruchomić aplikację automatycznie podczas rozruchu / logowania / w innym czasie?

42

Jak sprawić, by skrypt lub aplikacja działała automatycznie lub przestała działać automatycznie po uruchomieniu systemu, użytkownik loguje się w określonym czasie, gdy dysk jest podłączony itp.?

prosseek
źródło
3
Lingon to tylko aplikacja, dzięki której tworzenie plików .plist w celu uruchomienia jest bardziej przyjazne dla użytkownika. Ktoś także stworzył internetowy program do tworzenia list plist: plist.spotmac.de
Chealion
Gwizd! plist.spotmac.de wydaje się zniknąć. :-(
docwhat

Odpowiedzi:

44

Metoda GUI

Jeśli chcesz, aby coś działało po zalogowaniu użytkownika, najłatwiejszym sposobem jest skorzystanie z GUI. Możesz

  • Przejdź do System Prefs > Accounts > Login Itemsekranu i dodaj element przez
    • klikając +symbol
    • przeciągając i upuszczając .appna panel
  • W doku otwórz menu kontekstowe aplikacji, wybierz Options, a następnie wybierzOpen at Login

Uruchomiona metoda

Jeśli chcesz uruchomić coś, co nie jest .app, lub chcesz mieć większą kontrolę nad uruchomieniem, na przykład:

  • w określonym czasie lub w określonym odstępie czasu
  • ciągłe ponowne uruchamianie, jeśli ulegnie awarii
  • niezwiązane z logowaniem użytkownika
  • jako funkcja dostępu do sieci
  • uruchom tylko, gdy uruchomiony jest inny proces
  • po dodaniu pliku do folderu
  • itp.

wtedy chcesz skorzystać z rozwiązania technicznego, które jest launchd.

Najłatwiejszym sposobem skonfigurowania launchdpliku konfiguracyjnego jest skorzystanie z narzędzia, które pomoże. W chwili pisania najbardziej popularną metodą jest Lingon (która ma starszą bezpłatną wersję dostępną w SourceForge) lub narzędzie strony PList .

Kodowanie ręczne

Jeśli nie chcesz korzystać z Lingon ani strony PList i chcesz korzystać tylko z surowych narzędzi dostępnych w systemie, możesz pisać własne launchd plistręcznie

Oto mój uruchomiony skrypt do ciągłego uruchamiania SomeApp po uruchomieniu systemu (niezależnie od zalogowania się użytkownika). Jest w / System / Library / LaunchAgents / i nazywa się SomeApp.restart.plist. Jeśli jest uruchamiany w oparciu o login użytkownika, może być przechowywany w ~ / Library / LaunchAgents /

<?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>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>SomeApp.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>5</integer>
            <key>Minute</key>
            <integer>10</integer>
       </dict>
</dict>
</plist>

Załaduj go raz

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • RunAtLoadOpcja uruchomi aplikację pierwszy raz launchctl prowadzi to.
  • KeepAliveOpcja spowoduje ponowne uruchomienie aplikacji, jeśli się zawiesi.
  • StartCalendarIntervalBędzie go uruchomić w określonym czasie. Przypuszczalnie jest to wzajemnie wykluczające się z poprzednimi dwoma, ale zostało uwzględnione, aby pokazać, co można zrobićlaunchd
  • Launchctl uruchomi to po ponownym uruchomieniu.

Istnieje wiele dodatkowych opcji, które można znaleźć poprzez eksperymentowanie z Lingon lub poprzez czytanie stron man na launchctl, launchd.plist, plist, launchd.conf, itd.


źródło
Dzięki, naprawdę przydatne. Możesz także użyć, launchctl load -w ...aby zmiana była trwała. W oparciu o Wasze opinie zaktualizowałem skrypt konfiguratora OSX poweruser
sorin
8

Lingon nadal działa. Właśnie wykorzystałem go w zeszłym tygodniu do stworzenia „zaplanowanego zadania”. Po pobraniu musiałem użyć jego automatycznej aktualizacji, aby uzyskać najnowszą wersję, ale działa dobrze.

Robert S. Ciaccio
źródło
1
Lingon jest teraz także w App Store
151019
1
Ale aby znaleźć bezpłatną wersję open source, musisz wykopać ją z Sourceforge. Najnowsza wersja komercyjna również nie działa w systemie Leopard (10.5). Ale 2.1.1 tak - patrz sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb
7

Jeśli konieczne jest uruchomienie tylko podczas uruchamiania systemu, wystarczy użyć karty Elementy logowania w panelu preferencji Konta w Preferencjach systemowych.

alternatywny tekst

Jeśli jest to skrypt, użyj edytora AppleScript, aby zapisać go jako aplikację. Jeśli nie jest to skrypt AppleScript, nadal możesz użyć AppleScript do uruchomienia skryptu w następujący sposób:

do shell script "your script here"

ghoppe
źródło
Co? Jesteś pewien ? W interfejsie ekranu na ekranie jest napisane: „Te elementy otworzą się automatycznie po zalogowaniu” - czy to nie różni się od uruchomienia systemu? Ponadto twój link wydaje się mieć 404.
ssc
5

Nie zapomnij Loginhooks.

Chociaż działają jako root, powinieneś mieć możliwość wykonania skryptu $ HOME / .loginhook przy użyciu czegoś takiego:

#!/bin/sh

home=`eval echo ~$user`

if [ -x "$home/.loginhook" ]; then
    logger -t $0 "executing .loginhook of user $user"
    su - $user -c "$home/.loginhook"
fi

Następnie po prostu dodaj dowolne polecenia do ~ / .loginhook

Ponadto, chociaż „launch” to „Mac”, crontab jest nadal całkowicie wykonalną opcją i jest znacznie łatwiejszy do ręcznej edycji niż pliki XML uruchamiane.

Osobiście z radością zapłaciłem 5 USD za Lingon .

TJ Luoma
źródło
Więc skrypt w bloku kodu powinien zostać zapisany jako /path/to/script, i sudo defaults write com.apple.loginwindow LoginHook /path/to/script? A czy celem skryptu w katalogu domowym jest to, że każdy użytkownik może mieć niestandardowy (lub nie) ~/.loginhook?
Lri
@Lri - tak, dokładnie. Przepraszam, to nie było jaśniejsze. Kodem blokowym może być /usr/local/bin/loginhook.sh, a ponieważ jest uruchamiany przez użytkownika root, po zalogowaniu użytkownika będzie szukał $ HOME / .loginhook i uruchamiał go jako ten użytkownik.
TJ Luoma,
4

Uruchomienie aplikacji w określonym czasie można łatwo zrobić w iCal, co właśnie odkryłem dzięki innemu forum!

  1. Zrób nowe wydarzenie w iCal na czas, kiedy chcesz otworzyć aplikację.
  2. W „Alert” wybierz „Otwórz plik” - możesz więc ustawić plik na otwarcie, co oczywiście otworzy również domyślną aplikację dla tego typu pliku.
  3. Aby otworzyć aplikację, a nie plik, zmień menu „iCal” na „Inne ...” i wybierz aplikację, którą chcesz uruchomić!

Należy pamiętać, że jeśli masz wiele komputerów Mac współużytkujących rzeczy przez iCloud, to wydarzenie będzie również działać na tych aplikacjach, których możesz chcieć lub nie. Aby tak się stało tylko na jednym komputerze Mac, musisz utworzyć wydarzenie w kalendarzu „Na moim Macu”, który możesz wykonać w następujący sposób ...

  1. Ukryj wszystkie pozostałe kalendarze iCloud lub udostępnione na pasku po lewej stronie, najeżdżając kursorem na nazwę kalendarza i klikając przycisk „ukryj”, który się pojawi.
  2. Teraz kliknij prawym przyciskiem myszy (lub kliknij opcję, jeśli jesteś kompletnym kretynem i nadal nie zdajesz sobie sprawy, że masz więcej niż jeden palec i możesz zmienić preferencje myszy, aby był nieco bardziej użyteczny niż domyślny stan „kretyńskiej cegły dla kretynów” ) i wybierz „Nowy kalendarz”.
  3. Ponieważ wszystkie udostępnione kalendarze są ukryte, nowy kalendarz zostanie utworzony jako „Na moim Macu” i będzie lokalny na tym Macu.

Dopiero co się o tym dowiedziałem i mile zaskoczyły mnie obie wskazówki, więc pomyślałem, że podzielę się nimi tutaj.

Mam informacje od tych pomocnych ludzi tutaj ... więc dziękuję wam ludzie! ...

http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/

Slowboy
źródło