
No puedo programar un inicio periódico con launchctl
/ launchd
en OS X (Leopard). Básicamente, no puedo encontrar una lista de instrucciones paso a paso 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>
Puse este script dentro de la ruta ~/Library/LaunchAgents
.
A continuación, heregistradoel guión usando
launchctl load ~/Library/LaunchAgents/sync.plist
Finalmente, para probar que funciona,comenzóel trabajo:
launchctl start net.madrat.utils.sync
- No pasó nada. La ejecución manual del rsync
comando en la terminal produce el resultado esperado.
Estoy bastante seguro de que el trabajo se registró correctamente porque si intento iniciar un trabajo que no existe, aparece un mensaje de error (quenoingrese el comando anterior).
¿Qué hice mal?
Respuesta1
lingónes una buena herramienta GUI para gestionar launchd. El proyecto parece no ser compatible ahora... pero definitivamente todavía funciona en 10.5.x.
Pero para tu problema específico... ¿has probado?
sudo launchctl list
Esto le indicará si el .plist se está activando correctamente. Devolverá 1 si el demonio no se inicia y un '0' si tiene éxito. Quizás busque eso.
Siempre que veo un '1' generalmente es porque puse el script en el lugar equivocado, cometí un error tipográfico o configuré los permisos incorrectamente.
Además... reinicie con frecuencia... He visto
launchctl start
no será efectivo donde se realizó un reinicio.
Además, al analizar su pregunta más de cerca... ¿por qué no simplemente poner ese código rsync en un script bash... y pegarlo /usr/bin/
... Entonces podría simplemente chmod+x
ese archivo... y simplificar su .plist? para disparar ese script cuando quieras....
Respuesta2
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, ya que tiene tantas capacidades. Una buena idea es consultar la guía de introducción al ADC:http://developer.apple.com/macosx/launchd.html
También puede leer las páginas de manual de launchd
y launchctl
la sintaxis de los archivos .plist launchd.plist
.
Hay un malentendido frecuente sobre dónde colocar a tu agente o demonio, así que déjame darte información al respecto aquí:
- Si su trabajo necesita ejecutarse incluso cuando no hay usuarios conectados, colóquelo en /Library/LaunchDaemons.
- Si solo es útil cuando los usuarios han iniciado sesión, colóquelo en /Library/LaunchAgents o en los directorios personales de LaunchAgents de usuarios específicos (~/Library/LaunchAgents).
- No coloque su trabajo en /System/Library, que está reservado para demonios proporcionados por el sistema.
~/Library/LaunchAgents Per-user agents provided by the user. /Library/LaunchAgents Per-user agents provided by the administrator. /Library/LaunchDaemons System wide daemons provided by the administrator. /System/Library/LaunchAgents Mac OS X Per-user agents. /System/Library/LaunchDaemons Mac OS X System wide daemons.
Respuesta corta:
El nombre de su archivo plist puede ser incorrecto, no puedo probarlo ahora, pero lo habría configurado en net.madrat.utils.sync.plist
. También puede ser útil primero unload
tu demonio antes de cargarlo si editaste el archivo.
Respuesta3
No puedo encontrar documentación que indique que este es en realidad un comportamiento estándar, pero parece que launchd requiere rutas absolutas en los archivos plist. Así que inténtalo /usr/bin/rsync
en su lugar. ¡Funciona para mi!
Respuesta4
intente agregar estas claves a su archivo plist
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>