launchd
ejecuta Daemons ( /Library/LaunchDaemons
o /System/Library/LaunchDaemons
) como root, y los ejecutará independientemente de si los usuarios han iniciado sesión o no. Los Agentes de lanzamiento ( /Library/LaunchAgents/
o ~/Library/LaunchAgents/
) se ejecutan cuando un usuario inicia sesión como ese usuario. No puede utilizar setuid para cambiar el usuario que ejecuta el script en los daemons. El directorio /System
está reservado para las tareas de Mac OS X, por lo que recomiendo poner su launchd
en la carpeta /Library
o ~/Library
, ya que tiene sentido.
Entonces, el primer paso es determinar si estás creando un agente o un demonio.
El segundo paso es hacer tu archivo .plist
. Puede usar programas basados en GUI como Lingon para ayudar con esto o simplemente usar su editor de texto favorito:
Una muestra .plist
para ejecutar un script cada hora ( StartInterval
o StartIntervalCalendar
son las claves que queremos - StartInterval
para que ocurra un elemento cada x
segundos, StartIntervalCalendar
durante un tiempo específico y / o fecha. Consulte 126907 en SuperUser 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>
Modifique el .plist
según sea necesario para señalar su secuencia de comandos y los argumentos que sean necesarios (los argumentos están en líneas separadas) y guarde el archivo con el mismo nombre que el valor de Etiqueta pero con .plist
al final. (por ejemplo, local.my-mac.flickrstats
se guardaría como local.my-mac.flickrstats.plist
). Si aún no lo has hecho, mueve ese archivo .plist
a /Library/LaunchDaemons
al crear un Daemon (se ejecuta todo el tiempo) o a ~/Library/LaunchAgents
(solo estás registrado) o /Library/LaunchAgents
(cualquier usuario ha iniciado sesión ).
Para iniciar el trabajo, desea ejecutar launchctl
según sea necesario para cargar el archivo. Para los elementos en /Library
, debe usar sudo: por ejemplo, sudo launchctl load -w /PATH/TO/PLIST
Para referencia, también consulte las siguientes preguntas sobre el Superusuario: Launchd command as root , Cargar un daemon de todo el sistema , y ¿Cómo puedo hacer que se ejecute un script todos los días