Was ist der Unterschied zwischen den verschiedenen Ereignisplanern für OS X / Darwin?

Ich bin verwirrt über die Unterschiede zwischen den drei (mir bekannten) Tools zum Planen der Ausführung von Code unter OS X / Darwin:

Ich verstehe, dass crondas weitgehend veraltet ist, aber es wird immer noch von einigen Dienstprogrammen verwendet (wie Super Super!, Aus irgendeinem Grund), und das pmsethat die Fähigkeit, den Computer zu wecken, um bestimmte Jobs auszuführen. Aber mir ist nicht klar, was die Auswahl des einen gegenüber dem anderen im Allgemeinen leiten würde.

Wie unterscheiden sich diese drei Methoden der Betriebssystemplanung (insbesondere bei Mavericks, wenn die Dinge dort anders sind), insbesondere in den Aufgaben, für die sie geeignet sind, und wie sie sich im Schlaf oder Winterschlaf verhalten?

Antworten (2)

Verwenden Sie launchdanstelle von cron, at, oder anderen älteren UNIX-Tools für Mac OS X.

pmset

pmset ist ein integriertes Befehlszeilentool zum Abrufen und Einstellen von energiebezogenen Werten unter Mac OS X. Eine der Fähigkeiten von pmset ist das Hinzufügen und Entfernen von Einträgen aus der IOPMQueue; Die IOPMQueue ist die Warteschlange auf IOKit-Ebene, mit der Ihr Mac zu einer bestimmten Zeit eingeschaltet und aufgeweckt werden kann. IOPMQueue unterstützt auch die Planung von Herunterfahren und Neustarten.

Beliebiger Code kann nicht mit pmset oder über die IOPMQueue geplant werden.

Cron

cron ist ein fester Bestandteil der Welt der Aufgabenplanung. Unter Mac OS X wird die Verwendung von cron jedoch nicht empfohlen. Verwenden Sie launchd.

Cron wird implementiert, indem jede Minute nach fälligen Aufgaben gesucht wird. Dies ermöglicht ein leistungsstarkes und ausdrucksstarkes Scheduling-Format, jedoch auf Kosten der Notwendigkeit, den Prozessor jede Minute aufzuwecken.

cron weiß nicht, ob Ihr Mac schläft. Wenn eine Aufgabe fällig ist, während Ihr Mac im Energiesparmodus oder ausgeschaltet ist, wird die Aufgabe nicht ausgeführt. Wenn Ihr Mac wieder eingeschaltet wird, wird die Aufgabe nicht ausgeführt, da die Minute, in der sie ausgeführt werden sollte, verstrichen ist.

Es gibt andere Tools, die auf Cron aufbauen und verpasste Aufgaben nach dem Aufwachen ausführen können. Keine sind standardmäßig in Mac OS X enthalten.

launchd

launchd (Launch-Daemon) ist Apples Systemstarter, Planungstool und Prozesswächter. launchd wurde zuerst für die Bedürfnisse des Betriebssystems und dann für die Benutzer geschrieben. Es ist ein leistungsstarker und leistungsfähiger Prozess, mit dem Sie fast jeden anderen Prozess auf Ihrem Mac verwalten oder starten können.

launchd ist eine Verbesserung von cron für die Planung, da es keine Abfragen zum Ausführen von Aufgaben benötigt. Stattdessen kann launchd inaktiv bleiben, bis eine Aufgabe ausgeführt werden muss. In einer Ära des energiebewussten und mobilen Computing ist dies wichtig.

launchd wird einen schlafenden Mac nicht aufwecken, um Aufgaben auszuführen.

launchd-Jobtickets sind Eigenschaftslistendateien (plist). Diese Dateien können mit einem Texteditor oder mit einer Reihe von Anwendungen von Drittanbietern bearbeitet werden.

launchd wird für die meisten Planungssituationen empfohlen und ist dafür geeignet.

Dritte Seite

Unter Mac OS X sind eine Reihe von Planungstools von Drittanbietern verfügbar. Sie bieten häufig eine grafische Benutzeroberfläche oder bieten mehr Funktionen als in den Standard-Befehlszeilentools von Mac OS X enthalten sind. Das Tool, mit dem ich verbunden bin, ist Power Manager .

Das alles macht Sinn, aber warum sollte ein Produkt ( z. B. Super Duper! ) weiterhin verwendet cronwerden, insbesondere wenn es den Prozessor jede Minute aufweckt?!
Verwendung von Shirt Pocket cronfür Super Duper! ist nicht schlecht, sondern wahrscheinlich eine Designeinschränkung in ihren Plänen oder eine Einschränkung, auf launchddie sie während der Entwicklung gestoßen sind. Es gibt wenig Anreiz für Shirt Pocket, zu migrieren, launchdsolange crones für seine Kunden weiterhin gut funktioniert.
Und wird die CPU wirklich jede Minute geweckt?
Ja, Cron befindet sich in einer While-Schleife und überprüft Crontabs einmal pro Minute. Der in OS X 10.9 verwendete Cron-Code ist Open Source: opensource.apple.com/source/cron/cron-39/cron/cron.c Suchen Sie nach der cron_tickFunktion und der Aufrufschleife, um dieses Verhalten zu bestätigen.
Weckt also cronjede Sekunde auf, selbst wenn keine geplanten cronAufgaben vorhanden sind – dh das Aufwachen würde fortgesetzt, selbst wenn es keine gäbe?
cronwacht jede Minute auf, um zu prüfen, ob irgendwelche Aufgaben fällig sind.

pmsetist Low-Level-Zeug und steuert die Ausführung von Code nicht wirklich speziell, zumindest nicht auf direkte oder beabsichtigte Weise. Es steuert Dinge wie das Ein- oder Ausschalten Ihres Mac zu bestimmten Zeiten, ähnlich wie Sie es in den Systemeinstellungen » Energiesparmodus tun können. Im Allgemeinen sollten Sie nie pmsetetwas direkt verwenden müssen.

cronist immer noch da, weil … nun, weil Apple es noch nicht abgeschafft hat, obwohl es vor Ewigkeiten veraltet war. Ich vermute, es liegt daran, dass ein paar alte Un*x-Leute noch bei Apple arbeiten, die es nicht verschwinden sehen wollen. Aber wirklich, es macht keinen wirklichen Sinn, das zu verwenden, wenn Sie verwenden können launchd. IIRC- cronJobs werden nicht ausgeführt, wenn der Computer im Ruhezustand war, als er ausgeführt werden sollte.

launchdist Apples Ersatz cron, der der Planung von Ereignissen auf einem Mac viel Flexibilität verleiht. Auf diese Weise sollten Sie Ereignisse auf einem Mac planen. Der beste Weg, die Verwendung zu erlernen, launchdist LaunchControl , eine 10-US-Dollar-App ohne DRM, ohne Lizenzcodes und ohne Einschränkungen. (Die Entwickler verlassen sich auf die Ehrlichkeit ihrer Benutzer, die Registrierungsgebühr zu zahlen, wenn sie die App verwenden.) Sie erhalten nicht nur Drag-and-Drop-Funktionalität zum Einbringen verschiedener Elemente von launchdPlists, jedes einzelne ist dokumentiert, damit Sie es genau sehen können Was es macht. Sehr zu empfehlen.

Wie pmsetfunktioniert eine App wie Power Manager ? Es erstellt eindeutig pmsetEinträge (und verwendet kein cronoder launchd) und tut auch mehr, als nur die Maschine aufzuwecken (es führt willkürlichen Code aus).
Das weiß ich nicht.
Power Manager arbeitet direkt mit IOPMQueue zusammen, um Ihren Mac einzuschalten. Power Manager verwendet seine eigene Scheduling-Engine, um geplante Aktionen auszuführen.