No puedo programar un lanzamiento periódico con launchctl
/ launchd
en OS X (Leopard). Básicamente, no puedo encontrar una lista paso a paso de instrucciones en la web y el enfoque intuitivo no funciona.
El sync.plist
archivo:
<?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>
He puesto este script dentro del camino ~/Library/LaunchAgents
.
A continuación, he registrado el script usando
launchctl load ~/Library/LaunchAgents/sync.plist
Finalmente, para probar que funciona, comencé el trabajo:
launchctl start net.madrat.utils.sync
- No pasó nada. La ejecución manual del rsync
comando en el terminal produce el resultado esperado.
Estoy bastante seguro de que el trabajo se registró correctamente porque si intento iniciar un trabajo no existente, recibo un mensaje de error (que no recibí en el comando anterior).
¿Qué hice mal?
launchctl list
lo hizo de la pantalla 1, pero sólo después de que comenzara el agente manualmente utilizandolaunchctl start
.Respuesta larga:
Es difícil trabajar con launchd sin comprender algunos principios básicos. Por lo tanto, es probable que no encuentre ninguna instrucción paso a paso, tiene muchas capacidades. Un buen movimiento es dirigirse a la guía de inicio en el ADC: http://developer.apple.com/macosx/launchd.html
También puede leer las páginas del manual para
launchd
,launchctl
y la sintaxis de los archivos .Plist,launchd.plist
.Hay un malentendido frecuente sobre dónde poner a su agente o demonio, así que permítame mostrarle información al respecto aquí:
Respuesta corta:
El nombre de su archivo plist puede estar equivocado, no se puede probar en este momento, pero lo habría configurado
net.madrat.utils.sync.plist
. También puede ser útil primerounload
su demonio antes de cargarlo si editó el archivo.fuente
launchd bash
para la depuración, pero esto no funciona en Leopard (launchd
no se puede iniciar directamente).No puedo encontrar documentación de que este sea realmente un comportamiento estándar, pero parece que launchd requiere rutas absolutas en los archivos plist. Intenta en su
/usr/bin/rsync
lugar. ¡Funciona para mi!fuente
prueba esto, mis scripts funcionan sin usar la parte del programa, solo argumentos del programa ...
reemplazar
con
fuente
intente agregar estas claves a su archivo plist
fuente
Tiene una cosa incorrecta en su archivo .plist y una cosa dudosa (cada uno de estos puntos ha sido mencionado en respuestas anteriores; los estoy reuniendo aquí).
Sería mejor escribir:
El primer argumento en la
ProgramArguments
matriz es el programa que se ejecutará; lo ha omitido. SiProgram
se omite la clave, el valor predeterminado es el primer argumento deProgramArguments
; Probablemente sea aconsejable especificar esto solo una vez.Debido a que omitió este primer argumento, su .plist habrá invocado rsync (al ser nombrado
Program
), pero el 'primer argumento' de rsync habría sido/path/to/folder
, y no-ar
(el programa en ejecución habrá sido muy brevemente visible en laps
salida, antes de salir con un error, pero llamado como-ar
, que es el contenido del argumento cero).No tiene que incluir el camino
rsync
, pero en este tipo de contexto, probablemente sea prudente hacerlo, para evitar tener que confiar en quePATH
se establezca adecuadamente.La documentación para esto está en
launchd.plist(5)
. Tenga en cuenta que esa página de manual destaca que el valor de laProgramArguments
clave se pasa aexecvp(3)
. Es la página deexecvp
manual que explica sobre la búsqueda de RUTA.fuente