Pregunta

¿Cómo puedo ejecutar un script cada, por ejemplo, 30 minutos? Supongo que hay diferentes formas para diferentes sistemas operativos. Estoy usando OS X.

¿Fue útil?

Solución

Solo usa launchd . Es un sistema de inicio muy potente y, al mismo tiempo, es el sistema de inicio 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 , en , SysVinit ( init.d ), inetd , upstart y systemd . Toma prestados los conceptos de todos estos proyectos, pero también ofrece cosas que quizás no encuentres en otro lugar.

Cada servicio / tarea es un archivo. La ubicación del archivo depende de las preguntas: " ¿Cuándo se supone que este servicio debe ejecutarse? & Quot; y " ¿Qué privilegios necesitará el servicio? "

Las tareas del sistema van a

/Library/LaunchDaemons/

si se ejecutarán, sin importar si algún usuario ha iniciado sesión en el sistema o no. Se iniciarán con " raíz " privilegios

Si solo se ejecutarán si cualquier usuario ha iniciado sesión, van a

/Library/LaunchAgents/

y se ejecutará con los privilegios del usuario que acaba de iniciar sesión.

Si se ejecutarán solo si usted ha iniciado sesión, van a

~/Library/LaunchAgents/

donde ~ es su directorio HOME. Estas tareas se ejecutarán con sus privilegios, como si las hubiera iniciado usted mismo por línea de comandos o haciendo doble clic en un archivo en el Finder.

Tenga en cuenta que también existe / System / Library / LaunchDaemons y / System / Library / LaunchAgents , pero como es habitual, todo bajo / System es administrado por OS X. No debe colocar ningún archivo allí, no debe cambiar ningún archivo allí, a menos que realmente sepa lo que está haciendo. Estar jugando en la carpeta de Sistemas puede hacer que su sistema sea inutilizable (ponerlo en un estado en el que incluso se rehusará a reiniciarse). Estos son los directorios donde Apple coloca las tareas de launchd que hacen que su sistema esté en funcionamiento durante el inicio, inicie automáticamente los servicios según sea necesario, realice tareas de mantenimiento del sistema, etc.

En cada tarea de launchd hay un archivo en formato plist. Debe tener notación de nombre de dominio inversa. P.ej. puedes nombrar tu tarea

com.example.my-fancy-task.plist

Esta lista puede tener varias opciones y configuraciones. Escribir uno por mano es subó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 que no es de la tienda de aplicaciones (la versión que no es de la tienda de aplicaciones es mucho más poderosa y si ya planea pagarlo, en serio, obtenga la tienda que no es de la aplicación versión). Si alguien conoce una herramienta similar que sea de software libre o de código abierto, escríbame una línea en los comentarios y lo recomendaré (no quiero anunciar aquí software comercial).

A modo de 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 tareas en determinadas fechas / horas (básicamente, launchd puede hacer todo lo que puede hacer cron) o incluso puede desactivar " OnDemand " haciendo que launchd mantenga el proceso en ejecución de forma permanente (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 aún es compatible, está en desuso. La nueva configuración se denomina KeepAlive , lo que tiene mucho más sentido. Puede tener un valor booleano, en cuyo caso es exactamente lo contrario de OnDemand (establecerlo en false se comporta como si OnDemand sea true y al revés). 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 dan más control de grano fino en qué circunstancias se mantendrá viva la tarea. P.ej. solo se mantiene activo mientras el programa finalice 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 habilitar / deshabilitar tareas manualmente a través de la línea de comandos:

launchctl <command> <parameter>
El comando

puede cargarse o descargarse, para cargar un archivo o descargarlo nuevamente, en cuyo caso el parámetro es la ruta al archivo. O el comando puede ser iniciar o detener, para comenzar o detener una tarea, en cuyo caso el parámetro es la etiqueta (com.example.my-fancy-task). También existen otros comandos y opciones.

Consulte la documentación de Apple sobre formato plist y del launchctl herramienta de línea de comando (tenga en cuenta que puede seleccionar la versión de OS X en la parte superior, ya que el formato / las opciones varían entre diferentes versiones de OS X)

Otros consejos

puede usar el muy conveniente generador de plist: http://launched.zerowidth.com/ (no es necesario comprar nada ... )

le dará un shell de una sola línea para registrar un nuevo trabajo programado con el ya recomendado launchd

En MacOSX, tiene al menos las siguientes opciones:

Desde la experiencia personal, cron es el más confiable. Cuando lo probé, launchd tenía una serie de errores y peculiaridades. Las alarmas de iCal solo se ejecutan cuando está conectado (pero puede que sea algo que prefiera).

Como señaló Mecki, launchd sería el camino a seguir con esto. Hay una interfaz GUI para launchd llamada Lingon que tal vez desee revisar, en lugar de editar el lanzar archivos a mano:

  

Lingon es una interfaz gráfica de usuario para crear una edición lanzada   Archivos de configuración para Mac OS X Leopard 10.5.

     

[recorte ...]

     

Editar 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 el más común.   Configuraciones disponibles en una interfaz muy simple y modo experto.   donde puede agregar todas las configuraciones directamente en el texto o insertar   a través de un menú.

MAC OS tiene una herramienta Automator que es la misma que la de Task Scheduler en Windows. Y al usar Automator, puede programar tareas diariamente y vincular la tarea con un evento de calendario recurrente para ejecutar scripts a la hora especificada diariamente. consulte el enlace para ejecutar scripts diariamente en Mac OS

Para los scripts de Apple, configuro un calendario especial de iCal y uso alarmas para ejecutarlos periódicamente. Para las herramientas de línea de comandos, uso launchd.

FYI: aunque lo echo de menos, es siplicity, cron es una cosa del pasado en OS X. Era un perro guardián en pantera. Desde Tiger se ha lanzado. Entonces, si está ejecutando Leopard cron no es una opción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top