18 votos

¿Alguien puede recomendar un buen tutorial para escribir (desde cero) un cron-estilo launchd trabajo?

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.

13voto

Nick Berardi Puntos 31361

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

4voto

Greg Hurlman Puntos 10944

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>

4voto

Dan Harris Puntos 125

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.

2voto

Luke Girvin Puntos 8270

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.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X