it-swarm.com.de

Wie stelle ich eine Aufgabe so ein, dass sie immer wieder ausgeführt wird?

Wie kann ich alle 30 Minuten ein Skript ausführen lassen? Ich gehe davon aus, dass es für verschiedene Betriebssysteme unterschiedliche Möglichkeiten gibt. Ich benutze OS X.

70
stalepretzel

Verwenden Sie einfach launchd . Es ist ein sehr leistungsfähiges Launcher-System und mittlerweile das Standard-Launcher-System für Mac OS X (die aktuelle OS X-Version würde ohne dieses System nicht einmal booten). Für diejenigen, die mit launchd (oder mit OS X im Allgemeinen) nicht vertraut sind, ist es wie eine Kreuzung zwischen init, cron, at, SysVinit (init.d), inetd, upstart und systemd. Ausleihen von Konzepten all dieser Projekte, aber auch von Dingen, die Sie woanders nicht finden.

Jeder Dienst/jede Aufgabe ist eine Datei. Der Speicherort der Datei hängt von den folgenden Fragen ab: "Wann soll dieser Dienst ausgeführt werden?" und "Welche Berechtigungen benötigt der Dienst?"

Systemaufgaben gehen zu

/Library/LaunchDaemons/

wenn sie ausgeführt werden sollen, ist es egal, ob ein Benutzer am System angemeldet ist oder nicht. Sie werden mit "root" -Privilegien gestartet.

Wenn sie nur ausgeführt werden sollen, wenn ein Benutzer angemeldet ist, gehen sie zu

/Library/LaunchAgents/

und wird mit den Rechten des Benutzers ausgeführt, der sich gerade angemeldet hat.

Wenn sie nur ausgeführt werden sollen, wenn Sie angemeldet sind, gehen sie zu

~/Library/LaunchAgents/

wo ~ ist dein HOME-Verzeichnis. Diese Aufgabe wird mit Ihren Berechtigungen ausgeführt, als hätten Sie sie selbst über die Befehlszeile oder durch Doppelklicken auf eine Datei im Finder gestartet.

Beachten Sie, dass es auch /System/Library/LaunchDaemons Und /System/Library/LaunchAgents Gibt, aber wie üblich wird alles unter /System Von OS X verwaltet. Sie dürfen dort keine Dateien ablegen, Sie dürfen keine ändern Dateien dort, es sei denn, Sie wirklich wissen, was Sie tun. Das Herumspielen im Systemordner kann Ihr System unbrauchbar machen (in einen Zustand versetzen, in dem es sich sogar weigert, erneut zu starten). Dies sind die Verzeichnisse, in denen Apple) die launchd Tasks platziert, die Ihr System während des Startvorgangs zum Laufen bringen, Dienste nach Bedarf automatisch starten, Systemwartungsaufgaben ausführen und so weiter.

Zu jeder launchd Aufgabe gibt es eine Datei im plist-Format. Es sollte die umgekehrte Domainnamen-Schreibweise haben. Z.B. Sie können Ihre Aufgabe benennen

com.example.my-fancy-task.plist

Diese Liste kann verschiedene Optionen und Einstellungen haben. Das Schreiben einer Hand pro Hand ist nicht optimal. Vielleicht möchten Sie das kostenlose Tool Lingon zum Erstellen Ihrer Aufgaben herunterladen. Früher war dieses Tool kostenlos, jetzt kostet es im App Store 5 US-Dollar und 10 US-Dollar als Nicht-App-Store-Version (die Nicht-App-Store-Version ist viel leistungsfähiger und wenn Sie bereits vorhaben, dafür zu zahlen, sollten Sie den Nicht-App-Store kaufen Ausführung). Wenn jemand ein vergleichbares Tool kennt, das Freeware oder Open Source ist, schreiben Sie mir in die Kommentare, und ich werde es eher empfehlen (ich möchte hier keine Werbung für kommerzielle Software machen).

Nur als Beispiel könnte es so aussehen

<?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>com.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

Dieser Agent führt das Shell-Skript /usr/local/bin/my-script.sh alle 1800 Sekunden (alle 30 Minuten) aus. Sie können den Task auch zu bestimmten Daten/Zeiten ausführen lassen (im Grunde kann launchd alles tun, was cron kann) oder Sie können sogar "OnDemand" deaktivieren, wodurch launchd den Prozess permanent laufen lässt (wenn er beendet wird oder abstürzt, startet launchd ihn sofort neu). . Sie können sogar den Ressourcenverbrauch eines Prozesses begrenzen (wie bereits erwähnt, zeigt Lingon all diese Einstellungen in einer Benutzeroberfläche von Nice an).

Update: Obwohl OnDemand weiterhin unterstützt wird, ist es veraltet. Die neue Einstellung heißt KeepAlive, was viel sinnvoller ist. Es kann einen booleschen Wert haben. In diesem Fall ist es das genaue Gegenteil von OnDemand (wenn es auf false gesetzt wird, verhält es sich so, als ob OnDemandtrue ist anders herum). Das großartige neue Feature ist, dass es anstelle eines Booleschen auch einen Dictionary-Wert haben kann. Wenn es sich um ein Wörterbuch handelt, stehen Ihnen einige zusätzliche Optionen zur Verfügung, mit denen Sie genauer steuern können, unter welchen Umständen die Aufgabe am Leben bleiben soll. Z.B. es wird nur so lange am Leben gehalten, wie das Programm mit einem Beendigungscode von Null beendet wird, nur solange eine bestimmte Datei/ein bestimmtes Verzeichnis auf der Festplatte existiert, nur wenn eine andere Aufgabe ebenfalls am Leben ist oder nur wenn das Netzwerk gerade aktiv ist.

Sie können Aufgaben auch manuell über die Befehlszeile aktivieren/deaktivieren:

launchctl <command> <parameter>

der Befehl kann load oder unload sein, um eine plist zu laden oder wieder zu entladen. In diesem Fall ist parameter der Pfad zur Datei. Oder der Befehl kann start oder stop sein, um eine solche Aufgabe zu starten oder zu stoppen. In diesem Fall ist der Parameter das Label (com.example.my-fancy-task). Es gibt auch andere Befehle und Optionen.

Siehe Apples Dokumentation zum Plist-Format und zum launchctl Kommandozeilen-Tool (Beachten Sie, dass Sie die OS X-Version oben auswählen können, da das Format/Die Optionen variieren zwischen verschiedenen OS X-Versionen.)

113
Mecki

sie können den sehr praktischen Plist-Generator verwenden: http://launched.zerowidth.com/ (Sie müssen nichts kaufen…)

sie erhalten einen Shell-Einzeiler, um einen neuen geplanten Job mit dem bereits empfohlenen launchd zu registrieren.

37
Kosmotaur

Unter MacOSX haben Sie mindestens folgende Möglichkeiten:

  • Wiederkehrender iCal-Alarm mit einer Aktion "Skript ausführen"
  • launchd
  • cron ( link1 , link2 )

Aus eigener Erfahrung ist cron am zuverlässigsten. Beim Testen hatte launchd eine Reihe von Fehlern und Macken. iCal-Alarme werden nur ausgeführt, wenn Sie angemeldet sind.

11
Bruno De Fraine

Wie Mecki betonte, wäre launchd der richtige Weg, um dies zu erreichen. Es gibt eine GUI-Oberfläche für launchd mit dem Namen Lingon , die Sie möglicherweise auschecken möchten, anstatt die launchd-Dateien manuell zu bearbeiten:

Lingon ist eine grafische Benutzeroberfläche zum Erstellen von Konfigurationsdateien für Mac OS X Leopard 10.5.

[snip ...]

Das Bearbeiten einer Konfigurationsdatei ist in dieser Version einfacher als je zuvor und es gibt zwei verschiedene Modi. Grundlegender Modus, in dem die häufigsten Einstellungen in einer sehr einfachen Benutzeroberfläche verfügbar sind, und Expertenmodus, in dem Sie alle Einstellungen entweder direkt in den Text einfügen oder über ein Menü einfügen können.

6
Jay

MAC OS verfügt über ein Automator Tool, das mit dem von Task Scheduler identisch ist. in Fenstern. Mit Automator können Sie Aufgaben täglich planen und die Aufgabe mit einem wiederkehrenden Kalenderereignis verknüpfen, um Skripts täglich zu einer bestimmten Zeit auszuführen. Siehe Link m Skripte unter Mac OS täglich auszuführen

3
Jlearner

Für Apple Skripte habe ich einen speziellen iCal-Kalender eingerichtet und verwende Alarme, um sie regelmäßig auszuführen. Für Befehlszeilentools verwende ich launchd.

2
Mike Heinz

Zu Ihrer Information: Während ich die Schlingelhaftigkeit vermisse, gehört Cron unter OS X der Vergangenheit an. Es war Wachhund auf Panther. Seit Tiger wurde es ins Leben gerufen. Wenn Sie also Leopard Cron verwenden, ist dies keine Option.

1
joelbrock