Was könnte die Ausführung meines Backup-Skripts verhindern?

Ich habe Probleme, ein einfaches Sicherungsskript auszuführen. Das folgende Skript wird die meiste Zeit ausgeführt, schlägt jedoch gelegentlich vollständig fehl (ohne Protokollinformationen auszugeben). Gibt es etwas im Skript, das die Ausführung zeitweise verhindern könnte?

Selbst wenn es ausgeführt wird, werden die Testprotokollmeldungen manchmal verzögert angezeigt (als ob die Protokolldatei beim Schreiben nicht berührt wird oder das Schreiben in die Protokolldatei verzögert wird), was die Diagnose erschwert.

#!/bin/bash

printf "`date`: Start of Runkit backup Power Manager script:\n" >> ~/Library/Logs/Mine/tests.log

if [ $(mount | grep -c '/Volumes/Run Kit') != 1 ]
then
    printf "\tDon't copy: /Volumes/Run Kit not mounted\n" >> ~/Library/Logs/Mine/tests.log
else
    if [ $(pmset -g ac | grep -c 'Wattage') != 1 ]
    then
        printf "\tDon't copy: Not plugged in\n" >> ~/Library/Logs/Mine/tests.log
    else
        caffeinate -s -t 1200 &
        printf "\tDo copy: /Volumes/Run Kit mounted\n" >> ~/Library/Logs/Mine/tests.log
        /Users/Rax/Library/Application\ Support/SuperDuper\!/Scheduled\ Copies/SDUtil -i || open file:///Users/Rax/Library/Application\%20Support/SuperDuper\%21/Scheduled\%20Copies/Smart\%20Update\%20Run\%20Kit\%20from\%20Main.sdsp/Copy\%20Job.app
    fi
fi

printf "`date`: End of Runkit backup Power Manager script:\n" >> ~/Library/Logs/Mine/tests.log

exit 0
Welches Framework verwenden Sie, um das Skript zu starten?
Ich benutze Power Manager, um es auszuführen. Aber ich habe alle Trigger entfernt und führe es manuell als Power Manager-Aufgabe aus, um es zu testen. 9 von 10 Mal wird es ausgeführt, aber manchmal hat es keine Wirkung. Hat das Skript einen Fehler oder liegt das Problem beim Power Manager ?
Wenn Sie Power Manager verwenden, können Sie die Verzweigungen in Ihrem Skript reduzieren, indem Sie Ihrem Ereignis eine Bedingung hinzufügen. Erwägen Sie, Ihrem Skript einen Netzstromzustand hinzuzufügen; siehe imgur.com/9B2bw9g
@GrahamMiln: Ja. In diesem Fall wollte ich die Protokollierung, also habe ich den obigen Ansatz gewählt.
@raxacoricofallapatorius Sie können die Debug-Protokollierung im Power Manager aktivieren, um die Details der erstellten Protokolle erheblich zu verbessern. Sie können dann sehen, wie jeder Auslöser, jede Bedingung und jede Aktion ausgewertet und durchgeführt wird: dssw.co.uk/powermanager/guide/v4/administrator/…
@GrahamMiln: Danke. Die Dokumentation von Power Manager ist ausgezeichnet. Tatsächlich ist dies der einzige Ort, an dem ich eine zufriedenstellende Abrechnung der Energieverwaltungsfunktionen unter OS X gefunden habe.

Antworten (1)

printfIch würde die Anweisungen zuerst in Anweisungen umwandeln logger -p user.info, da sie in der Konsolen-App (und im Syslog) leicht beobachtet werden können, wenn das Skript ausgeführt wird.

Sie könnten auch ein zweites Skript erstellen, das nur Testmeldungen protokolliert oder leere Dateien erstellt, /usr/bin/touch /tmp/test.$$.logum festzustellen, ob Ihr obiges Skript der Übeltäter ist oder ob das von Ihnen verwendete Power Manager-Tool das Skript nicht zuverlässig startet.

Sie können auch versuchen, eine App wie Lingon zu verwenden , um launchdIhr Skript zu starten. Das System verwendet diese Einrichtung, um sich selbst zu betreiben, ist also sehr zuverlässig und protokolliert Fehler gut, wenn Sie später einmal ein Problem beheben müssen.

Ich sehe nicht, -p user.infozu Syslog zu gehen. Wohin gehen Nachrichten mit dieser Priorität?