macos - hacer - ¿Cómo configuro una tarea para que se ejecute cada cierto tiempo?
crontab download mac (7)
¿Cómo puedo ejecutar un script cada, digamos 30 minutos? Supongo que hay diferentes formas para diferentes sistemas operativos. Estoy usando OS X.
Como Mecki señaló, el lanzamiento sería el camino a seguir con esto. Hay una interfaz GUI para launchd llamada Lingon que es posible que desee verificar, en lugar de editar los archivos de launchd a mano:
Lingon es una interfaz gráfica de usuario para crear una edición de archivos de configuración de lanzamiento para Mac OS X Leopard 10.5.
[recorte...]
La edición de un archivo de configuración es más fácil que nunca en esta versión y tiene dos modos diferentes. Modo básico que tiene las configuraciones más comunes disponibles en una interfaz muy simple y Modo experto donde puede agregar todas las configuraciones directamente en el texto o insertarlas a través de un menú.
En MacOSX, tiene al menos las siguientes opciones:
Por experiencia personal, cron es el más confiable. Cuando probé, launchd tenía una serie de errores y caprichos. Las alarmas de iCal solo se ejecutan cuando estás conectado (pero eso podría ser algo que prefieres).
FYI: mientras que echo de menos es siplicity, cron es una cosa del pasado en OS X. Fue guardián en pantera. Desde Tiger se ha lanzado. Entonces, si estás ejecutando Leopard, cron no es una opción.
Mac tiene una herramienta Automator que es la misma que la del Programador de tareas en Windows. Pero con Automator puede programar una tarea a diario y vincular la tarea con un evento de calendario recurrente para ejecutar scripts a la hora especificada a diario. consulte el enlace para ejecutar scripts a diario en Mac OS
Para los scripts de apple, configuro un calendario iCal especial y uso alarmas para ejecutarlos periódicamente. Para las herramientas de línea de comandos, uso launchd.
podría usar el generador plist muy conveniente: http://launched.zerowidth.com/ (no es necesario comprar nada ...)
le dará un diseño único para registrar un nuevo trabajo programado con el launchd ya recomendado
Solo usa launchd . Es un sistema de iniciador muy potente y, mientras tanto, es el sistema de iniciador estándar para Mac OS X (la versión actual de OS X ni siquiera arrancaría sin él). Para aquellos que no están familiarizados con launchd
(o con OS X en general), es como un cruce entre init
, cron
, at
, SysVinit ( init.d
), inetd
, upstart
y systemd
. Se toman prestados conceptos de todos estos proyectos, pero también se ofrecen cosas que no se pueden encontrar en otros lugares.
Cada servicio / tarea es un archivo. La ubicación del archivo depende de las preguntas: "¿Cuándo se supone que se ejecutará este servicio?" y "¿Qué privilegios necesitará el servicio?"
Las tareas del sistema van a
/Library/LaunchDaemons/
si se ejecutarán, no importa si algún usuario ha iniciado sesión en el sistema o no. Se iniciarán con privilegios "raíz".
Si solo se ejecutan si algún usuario está conectado, van a
/Library/LaunchAgents/
y se ejecutará con los privilegios del usuario que acaba de iniciar sesión.
Si se ejecutarán solo si ha iniciado sesión, irán a
~/Library/LaunchAgents/
donde ~ es su directorio HOME. Estas tareas se ejecutarán con sus privilegios, tal como si las hubiera iniciado usted mismo por línea de comando o haciendo doble clic en un archivo en Finder.
Tenga en cuenta que también existe /System/Library/LaunchDaemons
y /System/Library/LaunchAgents
, pero como siempre, todo en /System
está gestionado por OS X. No debe colocar ningún archivo allí, no debe cambiar ningún archivo allí, a menos que realmente sabes lo que estas haciendo. Tropezar en la carpeta de Sistemas puede inutilizar su sistema (ponerlo en un estado en el que incluso se negará a reiniciarse). Estos son los directorios en los que Apple coloca las tareas de inicio que activan y ejecutan su sistema durante el arranque, inician los servicios automáticamente según sea necesario, realizan tareas de mantenimiento del sistema, etc.
Cada tarea de lanzamiento hay un archivo en formato plist. Debería tener la anotación inversa del nombre de dominio. Por ejemplo, puedes nombrar tu tarea
com.example.my-fancy-task.plist
Este plist puede tener varias opciones y configuraciones. Escribir uno por mano no es óptimo, es posible que desee obtener la herramienta gratuita Lingon para crear sus tareas. Esta herramienta solía ser gratuita, ahora cuesta $ 5 en la tienda de aplicaciones y $ 10 como la versión no de la tienda de aplicaciones (la versión que no es de la tienda de aplicaciones es mucho más poderosa y si usted planea pagarla, en serio, obtenga la tienda que no es de aplicaciones versión). Si alguien conoce una herramienta comparable que es freeware o de código abierto, escríbame una línea en los comentarios y preferiría recomendarla (no quiero anunciar aquí un software comercial).
Solo como un ejemplo, podría verse así
<?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.example.my-fancy-task</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/my-script.sh</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Este agente ejecutará el script de shell /usr/local/bin/my-script.sh cada 1800 segundos (cada 30 minutos). También puede ejecutar la tarea en determinadas fechas / horas (básicamente launchd puede hacer todo lo que cron puede hacer) o incluso puede desactivar "OnDemand", lo que provoca launchd para mantener el proceso funcionando permanentemente (si se cierra o se bloquea, launchd lo reiniciará inmediatamente) . Incluso puede limitar la cantidad de recursos que puede usar un proceso (como se dijo anteriormente, Lingon muestra todas estas configuraciones en una interfaz de interfaz de usuario agradable).
Actualización: aunque OnDemand
todavía es compatible, está en desuso. La nueva configuración se llama KeepAlive
, lo cual tiene mucho más sentido. Puede tener un valor booleano, en cuyo caso es exactamente lo contrario de OnDemand
(establecerlo en false
comporta como si OnDemand
true
y viceversa). La gran característica nueva es que también puede tener un valor de diccionario en lugar de uno booleano. Si tiene un valor de diccionario, tiene un par de opciones adicionales que le otorgan un control de grano más fino bajo cuyas circunstancias la tarea se mantendrá viva. Por ejemplo, solo se mantiene activo mientras el programa termine con un código de salida de cero, solo mientras exista un determinado archivo / directorio en el disco, solo si otra tarea también está activa, o solo si la red está actualmente activa.
También puede activar / desactivar tareas manualmente a través de la línea de comando:
launchctl <command> <parameter>
comando puede cargarse o descargarse, cargar un plist o descargarlo nuevamente, en cuyo caso el parámetro es la ruta al archivo. O el comando puede iniciarse o detenerse, para iniciar o detener dicha tarea, en cuyo caso el parámetro es la etiqueta (com.example.my-fancy-task). Otros comandos y opciones existen también.
Consulte la documentación de Apple del formato plist y de la herramienta de línea de comandos launchctl
(tenga en cuenta que puede seleccionar la versión de OS X en la parte superior, ya que el formato / opciones varían entre las diferentes versiones de OS X)