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.?
Wenn Sie möchten, dass etwas ausgeführt wird, wenn sich ein Benutzer anmeldet, verwenden Sie am einfachsten die GUI. Sie können
System Prefs > Accounts > Login Items
Bildschirm und fügen Sie das Element dort hinzu
+
Symbol.app
auf das FensterOptions
und dann ausOpen at Login
Wenn Sie etwas starten möchten, das keine ist .app
, oder mehr Kontrolle über das Starten haben möchten, z. B.:
dann möchten Sie die technische Lösung verwenden , die launchd
.
launchd
Der 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 .
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
plist
von 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
RunAtLoad
Option startet die Anwendung, wenn sie von launchctl zum ersten Mal ausgeführt wird.KeepAlive
Option startet die Anwendung neu, wenn sie abstürzt.StartCalendarInterval
wird 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
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.
launchctl load -w ...
, um die Änderung dauerhaft zu machen. Basierend auf Ihrem Feedback habe ich mein OSX-Poweruser-Konfiguratorskript aktualisiertlaunchctl load
nach Big Sur veraltet zu sein. Du kannst launchctl enable gui/$UID/SomeApp.restart
stattdessen 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.
Wenn es nur beim Booten des Systems ausgeführt werden muss, verwenden Sie einfach die Registerkarte "Anmeldeobjekte" Ihres Einstellungsbereichs "Konten" in den Systemeinstellungen.
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"
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 .
/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
?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!
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...
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/
Chealion
docwas