Cómo usar launchd para ejecutar secuencias de comandos según lo programado en macOS

Cómo usar launchd para ejecutar secuencias de comandos según lo programado 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?

launchd-scripts-maxwells-demonio

Los demonios (pronunciados «demonios») son scripts 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 o de otra aplicación. En macOS, están bajo el mando del framework launchd, que decide cuándo se inician y se detienen.

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

Escribir guiones

Cómo ejecutar un script de Python en Mac OS X

Para ejecutar demonios a través de launchd, deberá 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 secuencias de comandos bash.

Uso de launchd

launchd-scripts-trabajo-descripción

Los scripts en launchd son activados por definiciones de trabajo que son archivos .plist almacenados en directorios específicos. Estos archivos XML le dan un nombre al trabajo, especifican el script que debe ejecutarse e indican cuándo debe ejecutarse el script. Una vez que haya escrito su secuencia de comandos, escribirá y cargará una definición de trabajo que inicie la secuencia de comandos en el momento apropiado.

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>local.restart</string>
        <key>Program</key>
        <string>/Users/user/Scripts/restart.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

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.
  • Ejecutar en carga: describe cuándo debe ejecutarse el script. Hay algunas opciones diferentes aquí:
    • RunAtLoad: se ejecuta tan pronto como se carga 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.
      <key>StartInterval</key> 
      <integer>7200</integer>
    • 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.
      <key>StartCalendarInterval</key> 
      <dict>
        <key>Hour</key> 
        <integer>9</integer> 
        <key>Minute</key> 
        <integer>0</integer> 
      </dict>

Agentes contra demonios

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

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

La diferencia entre agentes y demonios se basa en dónde 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

launchd-scripts-launchctl-list

Una vez que haya creado sus scripts y guardado 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 lo que se está ejecutando actualmente en laucnhctl, puede usar launchctl list en la terminal Esta lista gigante se puede agrupar para su secuencia de comandos etiquetándola con algo como lo siguiente:

launchctl list | grep local.restart

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

launchctl load ~/Library/LaunchAgents/local.restart.plist

launchd-scripts-launchctl-load

Para eliminar el script de la cola de launchctl, use el unload dominio:

launchctl unload&nbsp;~/Library/LaunchAgents/local.restart.plist

launchd-scripts-launchctl-descarga

Cargar un trabajo lo coloca en la cola de inicio y el trabajo se ejecutará en el momento especificado en sus condiciones de inicio. Si desea ejecutar un script de inmediato, pase lo que pase, debe usar el comando «iniciar»:

launchctl start local.restart

Este comando toma la etiqueta del trabajo y solo funcionará si el trabajo ya se cargó en launchctl.

Conclusión

Puede usar launchd para crear secuencias de comandos que hacen cosas como limpiar archivos, reiniciar su servidor en un horario o ejecutar una aplicación cuando aparece un archivo determinado. Para obtener más información sobre launchd, puede consultar el tutorial de laucnhd.

Credito de imagen: Maxwell’s_demon

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas