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 usar setuid para cambiar el usuario que ejecuta el script en demonios. El /System
directorio está reservado para las tareas de Mac OS X, por lo que recomiendo colocar sus launchd
listas en /Library
la ~/Library
carpeta o en la carpeta, según tenga sentido.
Entonces, el primer paso es determinar si estás haciendo un agente o un demonio.
El segundo paso es hacer su .plist
archivo. 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 un elemento suceda cada x
segundo, StartIntervalCalendar
para una hora y / o fecha específica. Consulte 126907 en SuperUser para ver 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 .plist
según sea necesario para apuntar a su secuencia de comandos y cualquier argumento según sea necesario (los argumentos están en líneas separadas) y guarde el archivo con el mismo nombre que el valor de la etiqueta pero .plist
al final. (por ejemplo, se local.my-mac.flickrstats
guardaría como local.my-mac.flickrstats.plist
). Si aún no lo ha hecho, mueva ese .plist
archivo a /Library/LaunchDaemons
cuando crea un Daemon (se ejecuta todo el tiempo) o a ~/Library/LaunchAgents
(solo usted está conectado) o /Library/LaunchAgents
(cualquier usuario está conectado).
Para comenzar el trabajo que 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
Como referencia, también consulte las siguientes preguntas sobre Superusuario : comando iniciado como root , carga un demonio en todo el sistema y cómo puedo hacer que se ejecute un script todos los días