Tengo una bastante simple trabajo que me gustaría que se ejecute cada hora. Yo podría hacerlo usando cron
, pero he pensado que me gustaría usar esto para aprender acerca de la launchd
, desde que escuchar cosas buenas sobre él. Tengo la man launchd.plist
página como referencia, pero estoy buscando algo más basado en torno a la construcción de un ejemplo de trabajo.
Respuestas
¿Demasiados anuncios?launchd
ejecuta Demonios (/Library/LaunchDaemons
o /System/Library/LaunchDaemons
) como de la root, y se ejecutará independientemente de si los usuarios están conectados o no. El lanzamiento de los Agentes (/Library/LaunchAgents/
o ~/Library/LaunchAgents/
) se ejecuta cuando un usuario inicia la sesión como ese usuario. Usted no puede usar el bit setuid para cambiar el usuario que ejecuta el script en demonios. El /System
directorio está reservado para Mac OS X tareas así que les recomiendo poner tu launchd
plists en la /Library
o de la ~/Library
carpeta que tenga sentido.
Así que el primer paso es determinar si usted está haciendo un agente o a un demonio.
El segundo paso para hacer de su .plist archivo. Usted puede usar interfaz gráfica de usuario basada en programas tales como Lingon para ayudar con esto o simplemente utilizar su editor de texto favorito:
Una muestra plist para la ejecución de un script cada hora (StartInterval o StartIntervalCalendar es la clave que queremos - StartInterval de un elemento a suceder cada x segundos, StartIntervalCalendar por un tiempo específico y/o fecha. Ver 126907 en Superusuario para un ejemplo que hice con StartCalendarInterval):
<?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>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
Modificar el plist como necesario punto de la secuencia de comandos y los argumentos necesarios (los argumentos son en líneas separadas) y guarde el archivo con el mismo nombre que el valor de la Etiqueta pero con .plist en la final. (por ejemplo. local.mi mac.flickrstats se guardará como local.mi mac.flickrstats.plist). Si no se mueven ya que plist archivo /Library/LaunchDaemons
, si la realización de un Demonio (se ejecuta todo el tiempo) o ~/Library/LaunchAgents
(sólo estás conectado) o /Library/LaunchAgents
(cualquier usuario que ha iniciado sesión).
Para iniciar el trabajo que desea ejecutar launchctl
como necesario para cargar el archivo. Para los elementos en /Library
, se debe utilizar el comando sudo: por ejemplo. sudo launchctl load -w /PATH/TO/PLIST
Para referencia también echa un vistazo a las siguientes preguntas sobre Super Usuario: Launchd comando como root, la Carga de un amplio sistema de demonio, y ¿Cómo puedo obtener un script para que se ejecute cada día
Sé que no es un buen tutorial, pero usted podría tener un vistazo a los Demonios y Servicios Guía de Programación de Apple, que tiene una sección en la Programación de Trabajos programados.
Sé que no es un tutorial completo, pero, con él, usted puede entender los fundamentos de la launchd
.
También proporciona un ejemplo de un crond
tarea de :
<?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>com.apple.periodic-daily</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/periodic</string>
<string>daily</string>
</array>
<key>LowPriorityIO</key>
<true/>
<key>Nice</key>
<integer>1</integer>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</dict>
</plist>
Esto me ha ayudado mucho: http://launchd.info
Se cubre la configuración, administración y solución de problemas uso de Terminal o el launchd GUI LaunchControl. Los ejemplos se proporcionan también.
Yo sé que usted estaba buscando un tutorial, sino en la posibilidad de que alguien viene aquí como parte de buscando una herramienta para ayudarles a hacer/editar launchd entradas, la he usado antes: Lingon (sourceforge)
Ya no está siendo activamente desarrollado, pero lo que hay no funciona (y, obviamente, incluye fuente, etc). Lo he utilizado en Snow Leopard para programar copias de seguridad a la nube de Amazon, etc.