Ich habe versucht, einen nächtlichen Backup-Job auf meinem Mac Mini-Server zu konfigurieren, und nach viel Googeln und Graben und Manpages fand ich heraus, dass das auch richtig zu sein schien, und versuchte, meine eigene Plist-Datei launchd
einzurichten . Ich habe mir das ausgedacht (gespeichert in /Library/LaunchDaemons/dk.revealit.NightlyRSyncBackup.plist
):
<?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>Label</key>
<string>dk.revealit.NightlyRSyncBackup</string>
<key>ProgramArguments</key>
<array>
<string>/var/root/run-rsync</string>
</array>
<key>LowPriorityIO</key>
<true/>
<key>Nice</key>
<integer>1</integer>
<key>WorkingDirectory</key>
<string>/var/root</string>
<key>RunAtLoad</key>
<false/>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</dict>
</plist>
Das Problem ist, es funktioniert nicht. Ich kann es mit laden launchctl
, und es erscheint launchctl list
mit dem Exit-Status 0. Aber wenn ich meine Backup-Dateien überprüfe, werden sie nicht aktualisiert.
Irgendwelche Hinweise darauf, was ich falsch mache (vorausgesetzt, mein Backup-Skript funktioniert so, wie es sollte)?
Mir fallen mehrere Dinge ein:
Hast du über Nacht gewartet, bis es läuft? launchctl load
wird es nicht außerhalb der Reihenfolge laufen lassen -- wenn Sie es zu einer anderen Zeit als 3:15 Uhr laufen lassen möchten, verwenden Sie es, sudo launchctl start dk.revealit.NightlyRSyncBackup
nachdem es geladen wurde.
Löst das run-rsync-Skript irgendwelche Hintergrundprozesse aus oder macht es alles inline? Denn wenn das Skript beendet wird und noch Hintergrundprozesse laufen, denkt launchd, dass etwas schief gelaufen ist und beendet die Hintergrundprozesse. Wenn Sie dies nicht möchten, fügen Sie <key>AbandonProcessGroup</key><true/>
die .plist hinzu.
Hängt das Skript von PATH ab, einschließlich aller nicht standardmäßigen Verzeichnisse (z. B. /opt/local/bin oder so ähnlich)?
Eine nützliche Debugging-Technik besteht darin, Folgendes hinzuzufügen:
<key>StandardOutPath</key>
<string>/var/root/NightlyRSyncBackup.out</string>
<key>StandardErrorPath</key>
<string>/var/root/NightlyRSyncBackup.err</string>
in die .plist und sehen Sie, was in diesen Dateien angezeigt wird.
Nachdem Sie eine ähnliche Frage beantwortet haben , überprüfen Sie dies zuerst:
von demman lanuchctl
Beachten Sie, dass Konfigurationsdateien pro Benutzer (LaunchAgents) dem Benutzer gehören müssen, der sie lädt. Alle systemweiten Daemons (LaunchDaemons) müssen root gehören. Konfigurationsdateien dürfen nicht gruppen- oder weltweit beschreibbar sein. Diese Einschränkungen sind aus Sicherheitsgründen vorhanden, da die Beschreibbarkeit einer launchd-Konfigurationsdatei es einem ermöglicht, anzugeben, welche ausführbare Datei gestartet wird.
Also, wenn Ihr rsync als root gestartet werden soll
chown root /Library/LaunchDaemons/your.plist
chgrp wheel /Library/LaunchDaemons/your.plist
chmod 644 /Library/LaunchDaemons/your.plist
und danach:
launchctl load /Library/LaunchDaemons/your.plist
mmmmmm