Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>launchd - Backup per StartCalendarInterval

launchd - Backup per StartCalendarInterval

IceHouse
IceHouse18.11.1913:45
Hallo zusammen,

ich möchte ein tägliches Backup eines SparseImage haben und habe mir dazu ein LaunchDaemon Script gebaut. Da der Rechner nicht 24/7/365 durchläuft, kann es aber auch sein, das er erst um 9 Uhr gestartet wird (gestern passiert). Das Script versucht aber schon um 8 Uhr das Backup zu erstellen - was es natürlich nicht kann weil der Rechner noch aus ist. Vorgestern lief der Rechner schon um 8 Uhr und alles funktionierte.

Da gestern z.B. nichts passiert ist, vermute ich mal, dass der launchd den Event aus der Vergangenheit nicht mehr abarbeitet. Da ich noch 3 andere Scripte habe die auch Sicherheitskopien von Dateien anlegen sollen und ebenfalls nicht abgearbeitet wurden suche ich nun Rat bei euch. Eine Option vergessen? Ist launchd das falsche Tool?

Vielen Dank für sachdienliche Hinweise.

<?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>Disabled</key>
    <false/>
    <key>Label</key>
    <string>Backup IceSecure Image</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/ditto</string>
        <string>/Dokumente/IceSecure.sparseimage</string>
        <string>/Dokumente/IceSecure-DailyBackup.sparseimage</string >
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>8</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
    </array>
</dict>
</plist>
„Ich fotografiere, um herauszufinden, wie etwas aussieht, wenn es fotografiert wurde. - Gary Winogrand“
0

Kommentare

sierkb18.11.1914:12
IceHouse
Da gestern z.B. nichts passiert ist, vermute ich mal, dass der launchd den Event aus der Vergangenheit nicht mehr abarbeitet.

Jepp. So ist es. Da wird nix nachgeholt, wenn er aus ist/war. Es wird erst abgearbeitet, wenn der Rechner zu der eingestellten Uhrzeit eingeschaltet und "da" ist bzw. frühestens erst dann, wenn er, sollte er zu dem betreffenden Zeitpunkt im Schlafmodus gewesen sein, wieder aufwacht bzw. aufgewacht ist.

Apple Developer Documentation: About Daemons and Services: Scheduling Timed Jobs: Effects of Sleeping and Powering Off :
Apple
[…]
Effects of Sleeping and Powering Off

If the system is turned off or asleep, cron jobs do not execute; they will not run until the next designated time occurs.

If you schedule a launchd job by setting the StartCalendarInterval key and the computer is asleep when the job should have run, your job will run when the computer wakes up. However, if the machine is off when the job should have run, the job does not execute until the next designated time occurs.

All other launchd jobs are skipped when the computer is turned off or asleep; they will not run until the next designated time occurs.

Consequently, if the computer is always off at the job’s scheduled time, both cron jobs and launchd jobs never run. For example, if you always turn your computer off at night, a job scheduled to run at 1 A.M. will never be run.
0
Deichkind18.11.1914:40
Wäre der Computer nicht ausgeschaltet, sondern würde bloß schlafen, dann würde der Job nach dem Aufwachen ja nachgeholt. Sagt jedenfalls "man launchd.plist" in der Beschreibung des Parameters StartCalenderInterval.

Die Frage lautet eher, warum wird der Job nach dem Start des Computers trotz des Eintrags "RunAtLoad" nicht unmittelbar einmal ausgeführt?
Dasselbe Problem beobachte ich auf einem von zwei Rechnern bei jenem launchd-Job, den die Programmierer von Wireshark und Airtool kreiert haben, um die Rechte der BSD-Packet-Filter so abzuändern, dass sie vom Benutzer ohne Root-Rechte genutzt werden können. launchd hat diesen Job eigenmächtig mit dem Etikett "Disabled" versehen, und er wird dann nach dem Neustart des Rechners nicht ausgeführt. Man kann die Ausführung allerdings mit den Mitteln von launchctl erzwingen.
Auf dem anderen Rechner (mit macOS High Sierra) funktioniert der Script wie vorgesehen. Bei dem erstgenannten Rechner, der jetzt mit macOS Mojave läuft trat das beschriebene Problem jedoch auch schon mit High Sierra auf.
0
sierkb18.11.1914:58
Deichkind
Wäre der Computer nicht ausgeschaltet, sondern würde bloß schlafen, dann würde der Job nach dem Aufwachen ja nachgeholt. Sagt jedenfalls "man launchd.plist" in der Beschreibung des Parameters StartCalenderInterval.

So die Theorie. In der Praxis sieht es aber leider etwas anders aus, und launchd ist diesbzgl. unzuverlässig bzw. unzuverlässiger, als es laut Theorie sein dürfte, siehe z.B. auch hier , etc.
Theorie versus Praxis eben. Papier ist halt geduldig…
Deichkind
Die Frage lautet eher, warum wird der Job nach dem Start des Computers trotz des Eintrags "RunAtLoad" nicht unmittelbar einmal ausgeführt?

Siehe meine Aussage zuvor.
0
Deichkind18.11.1915:36
Howard Oakley von Eclectic Light Company beschreibt Stockungen bei Time Machine, die er auf macOS Sierra beobachtet hat und bei Stefan Haller ging es um Probleme mit StartCalenderInterval in launchd und dem Scheduler auf OS X Yosemite. Ich glaube, beides ist spätestens seit macOS High Sierra behoben.

Disclaimer: Ich bin nicht einer der Urheber der negativen Bewertungen bei Sierkbs Kommentaren.
+1
IceHouse
IceHouse18.11.1915:42
Danke für die Wortmeldungen. launchd ist also in meinem Fall das falsche Werkzeug. Ich habe das Problem nun anders gelöst:

sudo port install anacron

Mal schauen, wie sich dieses Werkzeug unter 10.14.6 verhält.

P.S.: Es hat zwar absolut nichts zu bedeuten, weil ich Bewertungen grundsätzlich ignoriere, aber ich wünschte die Abschaffung und / oder die Abschaltung auf Userwunsch wie bei den Bildern. Wie man an diesem Fred sehen kann, absolut nutzlos dieses "-1" gebashe.
„Ich fotografiere, um herauszufinden, wie etwas aussieht, wenn es fotografiert wurde. - Gary Winogrand“
+1
rene204
rene20418.11.1918:41
Ich habe das mittel "TimeMachineEditor" gelöst, dieser holt auch "verpasste" Backups nach. Auch lässt sich das Erstellen von stündlichen Snapshots ausschalten. funktioniert hier ohne Probleme.

https://tclementdev.com/timemachineeditor/
„Gelassenheit und Gesundheit.. ist das wichtigste...“
0
MikeMuc19.11.1909:03
rene204
Fragt sich nun nur, wie der das löst. Hat der nen Systemhelper der auch m Hintergrund dauernd läuft und den Dämonen Beine macht? Oder brauchen die ggf erweiterte Optionen damit „ausgefallene“ Jobs nachgeholt werden?
0
IceHouse
IceHouse19.11.1914:51
IceHouse
Danke für die Wortmeldungen. launchd ist also in meinem Fall das falsche Werkzeug. Ich habe das Problem nun anders gelöst:

sudo port install anacron

Mal schauen, wie sich dieses Werkzeug unter 10.14.6 verhält.
[...]

Tut genau das, für was es programmiert wurde. Sowohl nach "sleep" als auch nach ausschalten und verspätetem einschalten. Verarbeitet verpasste Termine durch einen crontab Eintrag der alle 10 Min. abgearbeitet wird.
The major difference between cron and anacron is that cron works effectively on machines that will run continuously while anacron is intended for machines that will be powered off in a day or week.
„Ich fotografiere, um herauszufinden, wie etwas aussieht, wenn es fotografiert wurde. - Gary Winogrand“
+1
IceHouse
IceHouse26.11.1914:42
MikeMuc
Fragt sich nun nur, wie der das löst. Hat der nen Systemhelper der auch m Hintergrund dauernd läuft und den Dämonen Beine macht? Oder brauchen die ggf erweiterte Optionen damit „ausgefallene“ Jobs nachgeholt werden?

Er installiert einen LaunchDeamon und ein Command Tool.
Command Line Tool

The tmectl(1) command line tool allows to print and modify settings, enable/disable the scheduler and uninstall the application. Just fire up the command without any argument to see its usage.

„Ich fotografiere, um herauszufinden, wie etwas aussieht, wenn es fotografiert wurde. - Gary Winogrand“
+1

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.