Wie kann ich ein Skript erstellen, das täglich unter Mac OS X ausgeführt wird?

63

Cron? Gestartet? iCal ??

Wenn das so ist, wie?

Paul D. Waite
quelle
1
Hier ist Apples Leitfaden für das Verfassen von Voreinstellungsdateien für den
Paul D. Waite,

Antworten:

62

Als Referenz würden alle 3 Optionen funktionieren. Die iCal-Option hat jedoch mehr Einschränkungen als die anderen.

(Es gibt GUIs zum Bearbeiten von cron und launchd, wie in anderen Antworten erwähnt)

Cron ist das direkteste und bekannteste und es gibt viele Tutorials. Mit den Coles Notes fügen Sie Ihrer Crontab die letzte Zeile von unten hinzu (entweder durch Bearbeiten /etc/crontaboder Verwenden crontabder Befehlszeile):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

Wurde in Mac OS X crontatsächlich durch ersetzt launchd, launchdist jedoch abwärtskompatibel mit der cronBedeutung, die Sie weiterhin verwenden können, erledigt cronjedoch die launchdgesamte Arbeit.

Wenn Sie verwenden möchten, sollten launchdSie auch andere Fragen zu Super User prüfen: (z. B. Wie führe ich einen launchd-Befehl als root aus? ) Wo möchten Sie Ihre Konfigurationsdatei (die plist-Datei) speichern ? Wie es läuft, hängt davon ab, in welchem ​​Verzeichnis es gespeichert ist und wie es geladen wird (z. B. ob Sie sudo verwendet haben oder nicht) - ähnlich wie bei cron.

Es folgt eine tägliche Beispielausführung von launchd plist (stellen Sie sicher, dass die Datei und das Label identisch sind - abzüglich der Plist für das Label). Dieses Skript wird täglich um 3 Minuten nach Mitternacht ausgeführt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

Es ist auch erwähnenswert, dass gestartete Aufgaben, wenn sie geplant wurden, wenn der Computer schläft oder ausgeschaltet ist, ausgeführt werden, wenn der Computer wieder verfügbar ist (Einschalten oder Aufwecken) - allerdings nur einmal, egal wie viele Tage er hat gewesen. Bearbeiten: Ich war gerade bei einem Apple-Dokument, das sagte, dass wenn der Computer ausgeschaltet ist, Sie während dieser Zeit alle Startereignisse verlieren werden (Ihr Skript wird beim Start nicht gestartet). (Schlaf startet das Skript beim Aufwachen.)


Eine andere Möglichkeit ist die Verwendung von " at " (siehe Handbuchseite mit "man at"). Das Skript kann sich selbst neu terminieren mit zB:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(Verwenden Sie "+ 10 Minuten" anstelle von "Morgen", um es alle 10 Minuten auszuführen. Um die Planung zu beenden, führen Sie einfach "at -l" aus, um die geplanten Job-IDs aufzulisten, und dann "at -r id ", um den Job zu entfernen.)

Möglicherweise müssen Sie den entsprechenden Dämon (atrun) zuerst mit (siehe https://superuser.com/a/43680 ) starten :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Vorteile: schnelle Fehlerbehebung, kein Sudo / Root-Zugriff erforderlich, komplizierte Zeitplanmuster einfach auszuführen Nachteil: keine Standard-Zeitplanmethode für OS X (wird gestartet)

Chealion
quelle
8
Sir, für Ihre Beispiel-Startdatei könnte ich Sie küssen . Aber ich werde nicht.
Paul D. Waite
5
launchdist der Weg, um unter OS X zu gehen.
Zneak
Ja, das war mein Eindruck. Es hört sich so an, als ob es in Tiger einige Probleme gegeben hätte, aber Apple scheint es seitdem schärfer gemacht zu haben.
Paul D. Waite
Unter OS 10.7.4 gibt es keine / etc / crontab-Datei. ): Also habe ich 'which crontab' gemacht und das hat mir / usr / bin / crontab gegeben, aber das ist eine verstümmelte Datei.
Hermann Ingjaldsson
@HermannIngjaldsson / usr / bin / crontab ist ein Programm; Wenn Sie es in einem Terminal mit ausführen crontab -e, werden Sie in einen terminalbasierten Texteditor für eine Datei versetzt, die beim Speichern zu Ihrer persönlichen Crontab wird.
Mark Reed
8

LaunchControl ist eine weitere GUI für launchd / launchctl. Während die von anderen erwähnten Alternativen durchaus in der Lage sind, ein Skript täglich zu starten, können Sie mit LaunchControl komplexe Zeitpläne konfigurieren (z. B. "einmal an jedem Wochentag, am Wochenende jede Stunde zwischen 14:00 und 20:00 Uhr"). Es ist auch (AFAIK) das einzige Tool, das den Job tatsächlich validiert. Wenn ein Job nicht wie erwartet funktioniert, zeigt er Ihnen, warum.

Es ist kostenlos zu versuchen, solange Sie wollen.

Mark Hall
quelle
3
Der Entwickler würde es vorziehen, die Lizenz zu bezahlen, obwohl es kostenlos ist, sie auszuprobieren / zu verwenden. sites.fastspring.com/somazone/product/shop
Kent
1
Absolut. Der Grund, warum ich diese Antwort an erster Stelle gepostet habe, war die Unterstützung des Entwicklers.
Mark Hall
5

CronniX ist ein nettes GUI-Frontend zum Planen von Cron-Jobs auf dem Mac ... Ziemlich anständig, wenn Sie nicht in die Cron-Dokumentation eintauchen möchten.

Zoran
quelle
2
  • Für iCal möchten Sie möglicherweise diesen Artikel lesen .
  • Sie sollten genügend Tutorials für finden, cronwenn Sie dafür googeln.

Es hängt davon ab, was Sie möchten: iCal-Skripte werden nur ausgeführt, wenn Sie angemeldet sind, führen crondas Skript aus, ohne angemeldet zu sein. Ich weiß nicht, ob iCal ein Skript ausführt, wenn der Mac zu dem Zeitpunkt ausgeschaltet war, als das Skript ausgeführt werden sollte ausgeführt worden. cronmacht das.

Felix
quelle
2

Ein Update: Sie können einige Apps im Mac OS X App Store auschecken, die dies tun:

Lingon scheint ebenfalls verfügbar zu sein, je nachdem, welches Betriebssystem Sie verwenden.

Steve Cooley
quelle
2

Hier ist ein einfaches, kostenloses Dienstprogramm zum Generieren von Plist-XML:

http://www.gieson.com/Library/projects/utilities/launcha/

Mit diesem Dienstprogramm brauchen Sie kein Programm zu installieren, sondern speichern die Ergebnisse in Ihrem Library / LaunchAgents-Ordner.

Bob
quelle
Warnung: Wenn Sie dieses Tool verwenden, stellen Sie sicher, dass RunAtStartes auf false gesetzt ist (es sei denn, Sie möchten, dass es true ist). Ich verbrachte eine Stunde damit, herauszufinden, warum mein Finder einfrieren und das Laden des Desktops beim Booten verhindern würde. Das Deaktivieren RunAtStartbeeinträchtigt nicht den festgelegten Zeitplan.
Andrea Lazzarotto
1

Ich benutze dafür immer Lingon , aber es sieht so aus, als wäre es aus der Entwicklung. Sie könnten es mit Crontooie versuchen , aber ich habe es nie persönlich benutzt. Oder bearbeiten Sie einfach die crontab-Datei im Terminal.

Josh
quelle
Mir scheint, Lingon befindet sich in der aktiven Entwicklung . Die aktuelle Version 3 ist zusammen mit der vorherigen Version 2 im AppStore erhältlich. Beide kosten ein paar Dollar und erhalten sehr gemischte Kritiken. Ich persönlich verwende Lingon 3 mit einigem Erfolg, empfehle es jedoch nicht für den Zweck in diesem Artikel gegenüber anderen Tools, die in anderen Antworten erwähnt werden (cron, at usw.).
SSC
Das letzte Mal, dass ich Lingon verwendet habe, war vor über 2 Jahren. Zu der Zeit hat es gut funktioniert, aber ich habe die letzten versons nicht verwendet. Schade, dass es nicht mehr so ​​zuverlässig ist wie früher.
Josh
0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... Alle fünf Minuten werden die Befehlszeilen ausgeführt, die Sie für ".... cut ...." eingeben.

30 Jahre Fortschritt, und 'cron' ist immer noch mein Lieblingsplaner.

-C

CJ Steele
quelle
0

Wenn ein Kalenderereignis Ihren Anforderungen entspricht, können Sie mit der integrierten Automator-Anwendung auch Kalenderalarme erstellen, die durch Kalenderereignisse ausgelöst werden. Sie können einige der integrierten UI-basierten Aktionen verwenden, um das zu tun, was Sie möchten, oder Sie können auch eine Anwendung oder ein benutzerdefiniertes AppleScript-, JavaScript- oder Shell-Skript ausführen.

Brett Zamir
quelle