Ich bin nicht in der Lage einen periodischen Start plant mit launchctl
/ launchd
auf O X (Leopard). Grundsätzlich kann ich keine Schritt-für-Schritt-Liste mit Anweisungen im Web finden, und der intuitive Ansatz funktioniert nicht.
Die sync.plist
Datei:
<?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>net.madrat.utils.sync</string>
<key>Program</key>
<string>rsync</string>
<key>ProgramArguments</key>
<array>
<string>-ar</string>
<string>/path/to/folder/</string>
<string>/path/to/backup/</string>
</array>
<key>StartInterval</key>
<integer>7200</integer>
</dict>
</plist>
Ich habe dieses Skript in den Pfad eingefügt ~/Library/LaunchAgents
.
Als nächstes habe ich das Skript mit registriert
launchctl load ~/Library/LaunchAgents/sync.plist
Um zu testen, ob es funktioniert, habe ich den Job gestartet :
launchctl start net.madrat.utils.sync
- Nichts ist passiert. Die manuelle Ausführung des rsync
Befehls im Terminal liefert das erwartete Ergebnis.
Ich bin mir ziemlich sicher, dass der Job korrekt registriert wurde, da beim Versuch, einen nicht vorhandenen Job zu starten, eine Fehlermeldung angezeigt wird (die ich im obigen Befehl nicht erhalten habe).
Was habe ich falsch gemacht?
launchctl list
habe 1 angezeigt, aber erst nachdem ich den Agenten manuell über gestartet habelaunchctl start
.Lange Antwort:
Es ist schwierig, mit launchd zu arbeiten, ohne einige Grundprinzipien zu verstehen. Es ist also wahrscheinlich, dass Sie keine Schritt-für-Schritt-Anleitung finden, sie hat so viele Möglichkeiten. Ein guter Schritt ist, den Leitfaden für die ersten Schritte im ADC zu lesen: http://developer.apple.com/macosx/launchd.html
Sie können auch den Manpages lesen
launchd
,launchctl
und die .plist - Dateien Syntaxlaunchd.plist
.Es gibt ein häufiges Missverständnis, wo Sie Ihren Agenten oder Deamon hinstellen sollen. Lassen Sie mich hier einige Informationen dazu veröffentlichen:
Kurze Antwort:
Der Name Ihrer plist-Datei ist möglicherweise falsch, kann derzeit nicht getestet werden, aber ich hätte ihn auf festgelegt
net.madrat.utils.sync.plist
.unload
Wenn Sie die Datei bearbeitet haben, kann es auch nützlich sein, zuerst Ihr Deamon zu laden, bevor Sie es laden.quelle
launchd bash
zum Debuggen vor - dies funktioniert jedoch nicht auf Leopard (launchd
kann nicht direkt gestartet werden).Ich kann keine Dokumentation finden, dass dies tatsächlich Standardverhalten ist, aber es scheint, dass launchd absolute Pfade in plist-Dateien erfordert. Also versuchen Sie es
/usr/bin/rsync
stattdessen. Funktioniert bei mir!quelle
versuche dies, meine Skripte funktionieren ohne den Programmteil zu verwenden, nur Programmargumente ...
ersetzen
mit
quelle
Versuchen Sie, diese Schlüssel zu Ihrer plist-Datei hinzuzufügen
quelle
Sie haben eine falsche Sache in Ihrer .plist-Datei und eine zweifelhafte Sache (jeder dieser Punkte wurde in früheren Antworten angesprochen; ich fasse sie hier zusammen).
Du schreibst besser:
Das erste Argument im
ProgramArguments
Array ist das auszuführende Programm. Sie haben dies ausgelassen. Wenn derProgram
Schlüssel weggelassen wird, wird standardmäßig das erste Argument von verwendetProgramArguments
. Es ist wahrscheinlich ratsam, dies nur einmal anzugeben.Da Sie dieses erste Argument ausgelassen, Ihre .plist wird haben rsync aufgerufen (durch Namen gekennzeichnet ist
Program
), aber rsync ‚erstes Argument‘ gewesen wäre/path/to/folder
, und nicht-ar
(das laufende Programm wird sehr kurz sichtbar gewesen inps
Ausgabe, bevor es beendet mit ein Fehler, aber benannt als-ar
, der den Inhalt des nullten Arguments darstellt).Sie müssen nicht haben , um den Pfad zu schließen
rsync
, aber in dieser Art von Kontext, ist es wahrscheinlich klug , dies zu tun, vertrauen, um zu vermeiden die inPATH
geeigneter Weise eingestellt werden.Die Dokumentation dazu ist in
launchd.plist(5)
. Beachten Sie, dass in dieser Manpage hervorgehoben wird, dass der Wert desProgramArguments
Schlüssels an übergeben wirdexecvp(3)
. Es ist dieexecvp
Manpage, die die PATH-Suche erklärt.quelle