Wie kann ich eine Anwendung automatisch starten / stoppen / neu starten, beim Booten / Anmelden / zu einem anderen Zeitpunkt?

42

Wie lässt sich ein Skript oder eine App so konfigurieren, dass sie automatisch ausgeführt oder angehalten wird, wenn das System gestartet wird, ein Benutzer sich zu einem bestimmten Zeitpunkt anmeldet, eine Festplatte angeschlossen ist usw.?

Prosseek
quelle
3
Lingon ist nur eine App, mit der die Erstellung der PLIST-Dateien für den Start benutzerfreundlicher gestaltet werden kann. Auch jemand hat einen webbasierten Launched-
Plist-
Boo! plist.spotmac.de scheint weg zu sein. :-(
docwhat

Antworten:

44

Gui-Methode

Wenn Sie möchten, dass beim Anmelden eines Benutzers etwas ausgeführt wird, können Sie am einfachsten die GUI verwenden. Du kannst

  • Gehen Sie zum System Prefs > Accounts > Login ItemsBildschirm und fügen Sie den Artikel dort hinzu
    • Klicken Sie auf das +Symbol
    • Ziehen und Ablegen der .appauf die Scheibe
  • Rufen Sie im Dock das Kontextmenü für eine App auf, wählen Sie Optionsund anschließendOpen at Login

Methode gestartet

Wenn Sie etwas starten möchten, das kein a ist .app, oder mehr Kontrolle über den Start haben möchten, wie z.

  • zu einer bestimmten Zeit oder in einem bestimmten Intervall
  • Ständig neu starten, wenn es abstürzt
  • Nicht mit der Benutzeranmeldung verbunden
  • als eine Funktion des Netzwerkzugriffs
  • Nur ausführen, wenn ein anderer Prozess ausgeführt wird
  • Wenn eine Datei zu einem Ordner hinzugefügt wird
  • usw.

dann möchten Sie die technische Lösung verwenden , die ist launchd.

Der einfachste Weg, eine launchdKonfigurationsdatei einzurichten, ist die Verwendung eines Hilfsprogramms. Zum Zeitpunkt des Schreibens ist Lingon (mit einer älteren kostenlosen Version von SourceForge) oder das PList-Website- Tool die beliebteste Methode .

Hand-Codierung

Wenn Sie Lingon oder die PList-Website nicht verwenden und nur die auf dem System verfügbaren Rohwerkzeuge verwenden möchten, können Sie Ihre eigenen launchd plistvon Hand schreiben

Hier ist mein launchd-Skript, mit dem SomeApp nach dem Systemstart kontinuierlich ausgeführt wird (unabhängig davon, ob sich ein Benutzer anmeldet). Es befindet sich in / System / Library / LaunchAgents / und heißt SomeApp.restart.plist. Wenn es auf der Basis einer Benutzeranmeldung ausgeführt wird, kann es in ~ / Library / LaunchAgents / gespeichert werden.

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

Laden Sie es einmal mit

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • Mit dieser RunAtLoadOption wird die Anwendung beim ersten Ausführen von launchctl gestartet.
  • Die KeepAliveOption startet die Anwendung neu, wenn sie abstürzt.
  • Der StartCalendarIntervalwird es zu einem bestimmten Zeitpunkt ausführen. Vermutlich schließt sich dies mit den beiden vorherigen gegenseitig aus, ist aber enthalten, um zu zeigen, was getan werden kannlaunchd
  • Launchctl wird dies nach einem Neustart ausführen.

Es gibt viele weitere Möglichkeiten , die durch das Experimentieren mit Lingon oder durch das Lesen der Manpages gefunden werden kann launchctl, launchd.plist, plist, launchd.confetc.


quelle
Danke, sehr nützlich. Sie können auch verwenden launchctl load -w ..., um die Änderung persistent zu machen. Aufgrund Ihres Feedbacks habe ich mein OSX Poweruser-Konfigurationsskript
Sorin
8

Lingon funktioniert immer noch. Ich habe es letzte Woche verwendet, um eine "geplante Aufgabe" zu erstellen. Nachdem ich es heruntergeladen hatte, musste ich seinen Auto-Updater verwenden, um die neueste Version zu erhalten, aber es funktioniert einwandfrei.

Robert S. Ciaccio
quelle
1
Lingon ist jetzt auch im App Store
user151019
1
Um die kostenlose Open-Source-Version zu finden, müssen Sie sie jedoch aus Sourceforge ausgraben. Die neueste kommerzielle Version funktioniert auch nicht mit Leopard (10.5). Aber 2.1.1 tut es - siehe sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb
7

Wenn die Ausführung nur beim Systemstart erforderlich ist, verwenden Sie einfach die Registerkarte "Anmeldeobjekte" im Bereich "Konten" in den Systemeinstellungen.

Alt-Text

Wenn es sich um ein Skript handelt, verwenden Sie den AppleScript-Editor, um es als Anwendung zu speichern. Wenn es sich nicht um ein AppleScript-Skript handelt, können Sie das Skript dennoch mit AppleScript wie folgt ausführen:

do shell script "your script here"

Ghoppe
quelle
Huh? Bist du dir da sicher ? In der Benutzeroberfläche Ihres Screenshots heißt es: "Diese Elemente werden automatisch geöffnet, wenn Sie sich anmelden." - Unterscheidet sich das nicht vom Zeitpunkt des Systemstarts? Außerdem scheint Ihr Link zu 404.
ssc
5

Loginhooks nicht vergessen.

Obwohl sie als root ausgeführt werden, sollten Sie in der Lage sein, ein $ HOME / .loginhook-Skript mit der folgenden Funktion auszuführen:

#!/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

Fügen Sie dann einfach die gewünschten Befehle zum ~ / .loginhook hinzu

Auch wenn 'launchd' "the Mac way" ist, ist crontab immer noch eine absolut praktikable Option und viel einfacher von Hand zu bearbeiten als XML-launchd-Dateien.

Persönlich habe ich glücklich 5 Dollar für Lingon bezahlt .

TJ Luoma
quelle
Das Skript im Codeblock sollte also als /path/to/scriptund gespeichert werden sudo defaults write com.apple.loginwindow LoginHook /path/to/script. Und der Punkt beim Ausführen eines Skripts im Home-Verzeichnis ist, dass jeder Benutzer eine benutzerdefinierte (oder keine) haben kann ~/.loginhook?
Lri
@Lri - ja genau. Entschuldigung, das war nicht klarer. Der Blockcode könnte /usr/local/bin/loginhook.sh lauten, und da er von root ausgeführt wird, sucht er nach einem $ HOME / .loginhook, wenn sich ein Benutzer anmeldet, und führt ihn als dieser Benutzer aus.
TJ Luoma
4

Das Ausführen einer App zu einem bestimmten Zeitpunkt ist in iCal ganz einfach, wie ich gerade in einem anderen Forum herausgefunden habe!

  1. Erstellen Sie in iCal ein neues Ereignis für die Zeit, zu der die App geöffnet werden soll.
  2. Wählen Sie unter "Warnung" die Option "Datei öffnen", damit Sie festlegen können, dass eine Datei geöffnet werden soll. Dadurch wird natürlich auch die Standardanwendung für diesen Dateityp geöffnet.
  3. Um nur eine App anstatt einer Datei zu öffnen, ändern Sie die Dropdown-Liste "iCal" in "Andere ..." und wählen Sie die App aus, die Sie ausführen möchten!

Beachten Sie, dass dieses Ereignis auch auf Apps ausgeführt wird, die Sie möglicherweise benötigen oder nicht. Damit dies nur auf einem einzelnen Mac möglich ist, müssen Sie das Ereignis in einem Kalender unter "Auf meinem Mac" erstellen. Gehen Sie dazu folgendermaßen vor:

  1. Blenden Sie alle anderen iCloud- oder freigegebenen Kalender in der linken Leiste aus, indem Sie den Mauszeiger über den Kalendernamen halten und auf die Schaltfläche "Ausblenden" klicken, die angezeigt wird.
  2. Klicken Sie jetzt mit der rechten Maustaste (oder mit der Wahltaste, wenn Sie ein vollständiges Kretin sind und noch nicht erkannt haben, dass Sie mehr als einen Finger haben, und können Sie die Mauseinstellungen so ändern, dass sie etwas nützlicher sind als der Standardstatus "Kretinous Brick for Cretins" ) und wählen Sie "Neuer Kalender".
  3. Da alle freigegebenen Kalender ausgeblendet sind, wird dieser neue Kalender als "Auf meinem Mac" erstellt und ist für diesen Mac lokal.

Ich habe das gerade erst selbst herausgefunden und war von beiden Tipps angenehm überrascht. Deshalb dachte ich, ich würde sie hier teilen.

Ich habe die Informationen von diesen hilfsbereiten Leuten hier ... also danke, Leute! ...

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

Slowboy
quelle