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.
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.
Antworten:
Verwenden Sie einfach launchd . Es ist ein sehr leistungsfähiges Startsystem und mittlerweile das Standard-Startsystem für Mac OS X (die aktuelle OS X-Version würde ohne es nicht einmal booten). Für diejenigen , die nicht vertraut sind launchd
(oder mit O X im Allgemeinen), ist es wie eine Kreuzung zwischen init
, cron
, at
, SysVinit ( init.d
) inetd
, upstart
und systemd
. Ausleihen von Konzepten für all diese Projekte, aber auch für Dinge, die Sie anderswo vielleicht nicht finden.
Jeder Dienst / jede Aufgabe ist eine Datei. Der Speicherort der Datei hängt von den Fragen ab: "Wann soll dieser Dienst ausgeführt werden?" und "Welche Berechtigungen benötigt der Dienst?"
Systemaufgaben gehen zu
/Library/LaunchDaemons/
ob sie ausgeführt werden sollen, unabhängig davon, ob ein Benutzer am System angemeldet ist oder nicht. Sie werden mit "root" -Berechtigungen gestartet.
Wenn sie nur ausgeführt werden sollen, wenn ein Benutzer angemeldet ist, gehen sie zu
/Library/LaunchAgents/
und wird mit den Berechtigungen 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/
Dabei ist ~ Ihr 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 existiert /System/Library/LaunchDaemons
und /System/Library/LaunchAgents
wie üblich alles unter /System
OS X verwaltet wird. Sie dürfen dort keine Dateien ablegen, Sie dürfen dort keine Dateien ändern, es sei denn, Sie wissen wirklich, was Sie tun. Durch Herumspielen im Ordner "Systeme" kann Ihr System unbrauchbar werden (in einen Zustand versetzen, in dem es sich sogar weigert, erneut zu starten). Dies sind die Verzeichnisse, in denen Apple die launchd
Aufgaben platziert, die Ihr System während des Startvorgangs zum Laufen bringen, die Dienste nach Bedarf automatisch starten, Systemwartungsaufgaben ausführen usw.
Für jede launchd
Aufgabe gibt es eine Datei im Plist-Format. Es sollte eine umgekehrte Domainnamen-Notation haben. ZB können Sie Ihre Aufgabe benennen
com.example.my-fancy-task.plist
Diese Liste kann verschiedene Optionen und Einstellungen haben. Das Schreiben einer Hand ist nicht optimal. Möglicherweise möchten Sie das kostenlose Tool Lingon zum Erstellen Ihrer Aufgaben verwenden. Früher war dieses Tool kostenlos, jetzt kostet es 5 US-Dollar im App Store und 10 US-Dollar als Nicht-App-Store-Version (die Nicht-App-Store-Version ist viel leistungsfähiger, und wenn Sie bereits vorhaben, ernsthaft dafür zu bezahlen, besorgen Sie sich den Nicht-App-Store Ausführung). Wenn jemand ein vergleichbares Tool kennt, das Freeware oder Open Source ist, schreibe mir eine Zeile in den Kommentaren und ich werde dieses eher empfehlen (ich möchte hier nicht für kommerzielle Software werben).
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 die Aufgabe auch an 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 dauerhaft laufen lässt (wenn er beendet wird oder abstürzt, wird launchd ihn sofort neu starten). . Sie können sogar einschränken, wie viele Ressourcen ein Prozess verwenden darf (wie bereits erwähnt, zeigt Lingon all diese Einstellungen in einer schönen Benutzeroberfläche an).
Update: Obwohl OnDemand
es weiterhin unterstützt wird, ist es veraltet. Die neue Einstellung wird benannt KeepAlive
, was viel sinnvoller ist. Es kann einen booleschen Wert haben. In diesem Fall ist es genau das Gegenteil von OnDemand
(Festlegen, dass es false
sich so verhält, als ob es OnDemand
ist, true
und umgekehrt). Die großartige neue Funktion ist, dass sie anstelle eines booleschen auch einen Wörterbuchwert haben kann. Wenn es einen Wörterbuchwert hat, haben Sie einige zusätzliche Optionen, die Ihnen eine genauere Kontrolle über die Körnung ermöglichen, unter welchen Umständen die Aufgabe am Leben erhalten werden soll. Beispielsweise wird es nur so lange am Leben gehalten, wie das Programm mit einem Exit-Code von Null beendet wurde, nur solange eine bestimmte Datei / ein bestimmtes Verzeichnis auf der Festplatte vorhanden ist, nur wenn eine andere Aufgabe ebenfalls aktiv 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 Laden oder Entladen sein, um eine Liste zu laden oder erneut zu entladen. In diesem Fall ist der Parameter der Pfad zur Datei. Oder der Befehl kann start oder stop sein, um eine solche Aufgabe einfach zu starten oder zu stoppen. In diesem Fall ist der Parameter die Bezeichnung (com.example.my-fantasie-task). Es gibt auch andere Befehle und Optionen.
Weitere Informationen finden Sie in der Apple-Dokumentation zum Plist-Format und zum launchctl
Befehlszeilentool (beachten Sie, dass Sie die OS X-Version oben auswählen können, da das Format / die Optionen zwischen verschiedenen OS X-Versionen variieren).
StartCalendarInterval
mit einem Array von zwei Wörterbüchern, sowohl mit dem Schlüssel Minute
als auch mit dem Wert einmal 00
und einmal, 30
würde genau das tun, was Sie angefordert haben. Bitte stellen Sie Fragen in Zukunft als Fragen, nicht als Kommentare, dann kann ich Ihnen auch das endgültige Wörterbuch zeigen (das kann ich in einem Kommentar nicht tun). Auf dieser Seite dreht sich alles um Fragen. Wenn Sie jemanden auf die Frage hinweisen möchten, veröffentlichen Sie den Link zur Frage als Kommentar, nicht jedoch die Frage selbst.
Sie können den sehr praktischen Plist-Generator verwenden: http://launched.zerowidth.com/ (Sie müssen nichts kaufen…)
es werden Ihnen ein Shell - Einzeiler einen neuen geplanten Auftrag mit der bereits empfohlen registrieren launchd
Unter MacOSX haben Sie mindestens die folgenden Optionen:
Aus persönlicher Erfahrung ist cron am zuverlässigsten. Als ich getestet habe, hatte launchd eine Reihe von Fehlern und Macken. iCal-Alarme werden nur ausgeführt, wenn Sie angemeldet sind (dies ist jedoch möglicherweise etwas, das Sie bevorzugen).
Wie Mecki betonte, wäre Launchd der richtige Weg. Es gibt eine GUI-Oberfläche für launchd namens Lingon , die Sie möglicherweise überprüfen 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 verfügt über zwei verschiedene Modi. Grundmodus mit den gängigsten Einstellungen in einer sehr einfachen Benutzeroberfläche und Expertenmodus, in dem Sie alle Einstellungen entweder direkt im Text hinzufügen oder über ein Menü einfügen können.
MAC OS verfügt über ein Automator- Tool, das dem von Task Scheduler in Windows entspricht. 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. Verweisen Sie auf den Link , um Skripte unter Mac OS täglich auszuführen
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.
Zu Ihrer Information: Während ich die Siplizität vermisse, gehört Cron unter OS X der Vergangenheit an. Es war ein Wachhund auf Panther. Seit Tiger wurde es gestartet. Wenn Sie also Leopard Cron verwenden, ist dies keine Option.
Mit cron können Sie Aufgaben planen.
crontab -e
Ein Job wird im folgenden Format angegeben.
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
Beispiel:
0 12 * * * cd ~/backupfolder && ./backup.sh
Sobald Sie Ihre Cron-Aufgaben installiert haben, können Sie mit crontab -l Ihre Aufgaben auflisten.
crontab -l
Wenn Sie mehr über Cron-Zeitplanausdrücke erfahren möchten, können Sie darauf zugreifen
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html