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

Wie lässt sich ein Skript oder eine App automatisch ausführen oder stoppen, wenn das System hochgefahren wird, sich ein Benutzer anmeldet, zu einem bestimmten Zeitpunkt, wenn eine Festplatte angeschlossen wird usw.?

Lingon ist nur eine App, um das Erstellen der .plist-Dateien für launchd benutzerfreundlicher zu gestalten. Außerdem hat jemand einen webbasierten Launchd-Plist-Ersteller erstellt: plist.spotmac.de
Buh! plist.spotmac.de scheint weg zu sein. :-(

Antworten (5)

Gui-Methode

Wenn Sie möchten, dass etwas ausgeführt wird, wenn sich ein Benutzer anmeldet, verwenden Sie am einfachsten die GUI. Sie können

  • Gehen Sie zum System Prefs > Accounts > Login ItemsBildschirm und fügen Sie das Element dort hinzu
    • Klicken Sie auf das +Symbol
    • Ziehen und Ablegen .appauf das Fenster
  • Rufen Sie im Dock das Kontextmenü für eine App auf, wählen Sie Optionsund dann ausOpen at Login

Launchd-Methode

Wenn Sie etwas starten möchten, das keine ist .app, oder mehr Kontrolle über das Starten haben möchten, z. B.:

  • zu einem bestimmten Zeitpunkt oder in einem bestimmten Intervall
  • ständig neu starten, wenn es abstürzt
  • nicht im Zusammenhang mit der Benutzeranmeldung
  • als Funktion des Netzzugangs
  • 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 launchd.

launchdDer einfachste Weg, eine Konfigurationsdatei einzurichten, besteht darin, ein Hilfsprogramm zu verwenden. Zum Zeitpunkt des Verfassens dieses Artikels ist Lingon (von dem eine ältere kostenlose Version von SourceForge erhältlich ist) oder das Website- Tool PList die beliebteste Methode .

Handcodierung

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, um SomeApp nach dem Systemstart kontinuierlich auszuführen (unabhängig davon, ob sich ein Benutzer anmeldet). Es befindet sich in /System/Library/LaunchAgents/ und heißt SomeApp.restart.plist. Wenn es basierend auf einer Benutzeranmeldung ausgeführt wird, könnte 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
  • Die RunAtLoadOption startet die Anwendung, wenn sie von launchctl zum ersten Mal ausgeführt wird.
  • Die KeepAliveOption startet die Anwendung neu, wenn sie abstürzt.
  • Das StartCalendarIntervalwird es zu einer bestimmten Zeit ausführen. Vermutlich schließt sich dies mit den beiden vorherigen gegenseitig aus, ist aber enthalten, um zu zeigen, was damit gemacht werden kannlaunchd
  • Launchctl führt dies nach Neustarts aus.

Es gibt viele zusätzliche Optionen, die durch Experimentieren mit Lingon oder durch Lesen der Manpages für launchctl, launchd.plist, plist, launchd.conf, usw. gefunden werden können.

Danke, wirklich nützlich. Sie können auch verwenden launchctl load -w ..., um die Änderung dauerhaft zu machen. Basierend auf Ihrem Feedback habe ich mein OSX-Poweruser-Konfiguratorskript aktualisiert
Scheint launchctl loadnach Big Sur veraltet zu sein. Du kannst launchctl enable gui/$UID/SomeApp.restartstattdessen laufen.

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

Lingon ist jetzt auch im App Store erhältlich
Aber um die kostenlose Open-Source-Version zu finden, müssen Sie sie aus Sourceforge ausgraben. Die neueste kommerzielle Version funktioniert auch nicht auf Leopard (10.5). Aber 2.1.1 tut es - siehe sourceforge.net/projects/lingon/files/Lingon/2.1.1

Wenn es nur beim Booten des Systems ausgeführt werden muss, verwenden Sie einfach die Registerkarte "Anmeldeobjekte" Ihres Einstellungsbereichs "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 AppleScript trotzdem verwenden, um das Skript wie folgt auszuführen:

do shell script "your script here"

Häh? Bist du dir da sicher ? In der Benutzeroberfläche Ihres Screenshots steht "Diese Elemente werden automatisch geöffnet, wenn Sie sich anmelden" - ist das nicht anders als beim Systemstart? Außerdem scheint Ihr Link 404 zu sein.

Loginhooks nicht vergessen.

Obwohl sie als Root ausgeführt werden, sollten Sie in der Lage sein, ein $HOME/.loginhook-Skript auszuführen, indem Sie Folgendes verwenden:

#!/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 zu ~/.loginhook hinzu

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

Ich persönlich habe gerne 5 Dollar für Lingon bezahlt .

Das Skript im Codeblock sollte also als /path/to/script, und 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 ein benutzerdefiniertes (oder kein) ~/.loginhook?
@Lri - ja, genau. Sorry 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 diesen Benutzer aus.

Das Ausführen einer App zu einem bestimmten Zeitpunkt kann in iCal problemlos durchgeführt werden, wie ich gerade dank eines anderen Forums herausgefunden habe!

  1. Erstellen Sie ein neues Ereignis in iCal für die Zeit, zu der die App geöffnet werden soll.
  2. Wählen Sie bei 'Alert' 'Open File' - so können Sie eine Datei zum Öffnen einstellen, was natürlich auch die Standardanwendung für diesen Dateityp öffnet.
  3. Um nur eine App statt einer Datei zu öffnen, ändern Sie das Dropdown-Menü „iCal“ in „Andere …“ und wählen Sie die App aus, die Sie ausführen möchten!

Beachten Sie Folgendes: Wenn Sie mehrere Macs haben, die Inhalte über iCloud teilen, wird dieses Ereignis auch für diese Apps ausgeführt, die Sie möglicherweise möchten oder nicht. Damit dies nur auf einem einzelnen Mac geschieht, müssen Sie das Ereignis in einem „Auf meinem Mac“-Kalender erstellen, was Sie wie folgt tun können...

  1. Blenden Sie alle anderen iCloud- oder freigegebenen Kalender in der linken Leiste aus, indem Sie den Mauszeiger über den Kalendernamen bewegen und auf die Schaltfläche „Ausblenden“ klicken, die angezeigt wird.
  2. Klicken Sie jetzt mit der rechten Maustaste (oder klicken Sie mit der Wahltaste, wenn Sie ein Vollidiot sind und immer noch nicht bemerkt haben, dass Sie mehr als einen Finger haben und Ihre Mauseinstellungen so ändern können, dass sie etwas nützlicher sind als der Standardstatus "Kretiner Ziegelstein für Kretins". ) und wählen Sie „Neuer Kalender“.
  3. Da alle freigegebenen Kalender ausgeblendet sind, wird dieser neue Kalender als „Auf meinem Mac“ erstellt und ist lokal auf diesem Mac.

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

Ich habe die Informationen von diesen hilfreichen Leuten hier drüben bekommen ... also danke euch Leuten! ...

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