Cómo utilizar launchd para ejecutar scripts programados en macOS

launchd es una herramienta para iniciar, detener y administrar scripts y procesos. Si ha trabajado con alguna versión de Linux, es posible que esté familiarizado con cron. launchd es básicamente cron en macOS.

¿Qué son los demonios?

Los demonios (que se pronuncian “demonios”) son secuencias de comandos que se ejecutan en segundo plano. A diferencia de las aplicaciones, los demonios se ejecutan como procesos y no están bajo el control directo del usuario u otra aplicación. En macOS, están bajo el mando del marco launchd, que decide cuándo se inician y se detienen.

El nombre inusual proviene del demonio de Maxwell , un agente imaginario que clasifica moléculas en un experimento mental de termodinámica.

Escribir guiones

Para ejecutar demonios a través de launchd, necesitará escribir algunos scripts. El lenguaje de programación más común es bash. Si desea obtener más información sobre las secuencias de comandos bash, puede consultar nuestra guía para principiantes sobre las secuencias de comandos bash .

Usando launchd

Los scripts en launchd se activan mediante definiciones de trabajo que son archivos .plist almacenados en directorios específicos. Estos archivos XML dan un nombre al trabajo, especifican el script que se debe iniciar e indican cuándo se debe ejecutar el script. Una vez que haya escrito su guión, escribirá y cargará una definición de trabajo que inicie el guión en el momento apropiado.

Una definición de trabajo se parece a lo que se muestra a continuación:

Modifique según sea necesario, luego colóquelo en un archivo de texto con la extensión .plist antes de colocarlo en el directorio correcto (ver más abajo).

Hay algunas partes clave en la descripción del trabajo:

  • Etiqueta: el nombre del trabajo dentro de launchd. Debe ser único para cada trabajo. Estos están escritos en notación de dominio inverso y “local” es un gran dominio para agentes privados.
  • Programa: la ruta completa del script que inicia esta descripción de trabajo.
  • RunAtLoad: describe cuándo se debe ejecutar el script. Aquí hay algunas opciones diferentes:

    • RunAtLoad : ejecutar tan pronto como se cargue la definición del trabajo. Funciona solo una vez por carga.
    • StartInterval : inicia el trabajo cada n segundos. Este ejemplo ejecutará el trabajo cada 7200 segundos o cada 2 horas.

    • StartCalendarInterval : ejecuta el trabajo en una fecha y hora específicas. El siguiente código ejecutará el trabajo todos los días a las 9 a. M.

Agentes contra demonios

Una vez que haya escrito la descripción de su trabajo, deberá guardarla en el directorio correspondiente.

launchd distingue además entre agentes y daemons. Un agente se ejecuta en nombre del usuario que ha iniciado sesión, mientras que un demonio se ejecuta en el usuario raíz. Esto significa que si desea restringir un script a una cuenta de usuario específica, puede usar un agente. Si desea que algo se ejecute sin importar quién esté conectado, usará un demonio.

La diferencia entre agentes y daemons se extrae de donde se guardan en la computadora:

  • “~ / Library / LaunchAgents” se ejecuta en nombre del usuario que inició sesión
  • “/ Library / LaunchDaemons” se ejecuta en nombre de los usuarios raíz

Deberá guardar su plist en la ubicación correcta.

Cargando trabajos en launchctl

Una vez que haya creado sus scripts y haya guardado a su agente en el lugar correcto, deberá cargarlo en launchctl. Esto sucederá automáticamente en los inicios de sesión en el futuro.

Para ver qué se está ejecutando actualmente en laucnhctl, puede usar launchctl listen la terminal. Esta lista gigante se puede agrupar para su script etiquetándola con algo como lo siguiente:

Para cargar un script, abra Terminal y use el siguiente comando:

Para eliminar el script de la cola launchctl, use el unloadcomando:

La carga de un trabajo lo coloca en la cola de lanzamiento y el trabajo se ejecutará en el momento especificado en sus condiciones de lanzamiento. Si desea ejecutar un script inmediatamente pase lo que pase, debe usar el comando “iniciar”:

Este comando toma la etiqueta del trabajo y solo funcionará si el trabajo ya se ha cargado launchctl.

Conclusión

Puede usar launchd para crear scripts que hagan cosas como limpiar archivos, reiniciar su servidor en un horario o ejecutar una aplicación cuando aparezca un determinado archivo. Para aprender mucho más sobre launchd, puede consultar el tutorial de laucnhd.

Crédito de la imagen: Maxwell’s_demon

¡Si te ha gustado vota con 5 Estrellas!
(Votos: 0 Promedio: 0)

Escribe Aquí Tu Comentario