¿Cuál es la diferencia entre los diversos programadores de eventos para OS X/Darwin?

Estoy confundido acerca de las diferencias entre las tres (que yo sepa) herramientas para programar la ejecución de código en OS X/Darwin:

Entiendo que cronestá en desuso en gran medida, pero todavía lo usan algunas utilidades (como Super Super!, por alguna razón), y pmsettiene la capacidad de activar la computadora para ejecutar trabajos específicos. Pero no tengo claro qué guiaría la selección de uno sobre el otro en general.

¿Cómo difieren estos tres métodos de programación del sistema operativo (especialmente en Mavericks, si las cosas son diferentes allí), especialmente en los niños de las tareas para las que son adecuados y cómo se comportan durante el sueño o la hibernación?

Respuestas (2)

Utilice launchden lugar de cron, atu otras herramientas UNIX heredadas para Mac OS X.

pmset

pmset es una herramienta de línea de comandos incorporada para obtener y configurar valores relacionados con la energía en Mac OS X. Una de las capacidades de pmset es agregar y eliminar entradas de IOPMQueue; IOPMQueue es la cola de nivel de IOKit que permite que su Mac se encienda y se despierte en un momento específico. IOPMQueue también admite la programación de apagados y reinicios.

El código arbitrario no se puede programar mediante pmset o a través de IOPMQueue.

cron

cron es un incondicional del mundo de la programación de tareas. Sin embargo, en Mac OS X, no se recomienda usar cron. uso launchd_

cron se implementa al verificar cada minuto las tareas que vencen. Esto permite un formato de programación potente y expresivo, pero a costa de tener que reactivar el procesador cada minuto.

cron no sabe si tu Mac está durmiendo. Si vence una tarea mientras su Mac está inactiva o apagada, la tarea no se llevará a cabo. Cuando su Mac se vuelva a encender, la tarea no se realizará porque ha pasado el minuto en el que debería haberse ejecutado.

Hay otras herramientas que se basan en cron y pueden ejecutar tareas perdidas al despertar. Ninguno está incluido por defecto con Mac OS X.

lanzado

launchd (demonio de lanzamiento) es el iniciador del sistema, la herramienta de programación y el control de procesos de Apple. launchd está escrito para las necesidades del sistema operativo en primer lugar y de los usuarios en segundo lugar. Es un proceso poderoso y capaz que se utiliza para administrar o iniciar casi todos los demás procesos en su Mac.

launchd es una mejora en cron para la programación porque no necesita sondear para realizar tareas. En su lugar, launchd puede permanecer inactivo hasta el momento en que se deba realizar una tarea. En una era de computación móvil y consciente de la energía, esto es importante.

launchd no activará una Mac dormida para realizar tareas.

Las fichas de trabajo de launchd son archivos de lista de propiedades (plist). Estos archivos se pueden editar con un editor de texto o con varias aplicaciones de terceros.

launchd se recomienda y es adecuado para la mayoría de las situaciones de programación.

Tercero

Hay varias herramientas de programación de terceros disponibles en Mac OS X. A menudo proporcionan una interfaz gráfica u ofrecen más funciones que las que se incluyen en las herramientas de línea de comandos estándar de Mac OS X. La herramienta con la que estoy asociado es Power Manager .

Todo esto tiene sentido, pero ¿por qué un producto ( ¡Super Duper!, por ejemplo) continuaría usándose cron, especialmente si activa el procesador cada minuto?!
¡ Uso de bolsillo de camisa cronpara Super Duper! no es malo, sino que es probable que haya alguna restricción de diseño en sus planes, o una limitación launchdque encontraron durante el desarrollo. Hay pocos incentivos para que Shirt Pocket migre a launchdmientras cronsiga funcionando bien para sus clientes.
¿Y realmente despierta la CPU cada minuto?
Sí, cron se encuentra en un bucle while comprobando crontabs una vez por minuto. El código cron utilizado en OS X 10.9 es de código abierto: opensource.apple.com/source/cron/cron-39/cron/cron.c busque la cron_tickfunción y el ciclo de llamada para confirmar este comportamiento.
Entonces, ¿ cronse despierta cada segundo, incluso si no hay crontareas programadas, es decir, la vigilia continuaría incluso si no hubiera ninguna?
cronse despierta cada minuto para verificar si hay alguna tarea pendiente.

pmsetes algo de bajo nivel, y realmente no controla la ejecución del código específicamente, al menos no de forma directa o intencionada. Controla cosas como encender o apagar su Mac en momentos específicos, de forma similar a como lo puede hacer en Preferencias del sistema » Ahorro de energía. En términos generales, nunca debería necesitar usarlo pmsetpara nada directamente.

cronsigue ahí porque… bueno, porque Apple aún no lo ha acabado, a pesar de haberlo dejado obsoleto hace mucho tiempo. Sospecho que es porque hay algunas personas de Un * x de antaño que todavía trabajan en Apple que no quieren ver que se vaya. Pero, en realidad, no tiene sentido usar eso si puedes usar launchd. Los trabajos de IIRC cronno se ejecutan si la computadora estaba inactiva cuando se suponía que debía ejecutarse.

launchdes el reemplazo de Apple cronque agrega mucha flexibilidad a la programación de eventos en una Mac. Esta es la forma en que debe programar eventos en una Mac. La mejor manera de aprender a usar launchdes LaunchControl , que es una aplicación de US$10 sin DRM, sin códigos de licencia y sin restricciones. (Los desarrolladores confían en la honestidad de sus usuarios para pagar la tarifa de registro si usan la aplicación). No solo obtiene la funcionalidad de arrastrar y soltar para traer varios elementos de launchdplists, cada uno está documentado para que pueda ver exactamente Que hace. Altamente recomendado

En cuanto a pmset, ¿cómo funciona una aplicación como Power Manager ? Claramente crea pmsetentradas (y no usa crono launchd) y también hace más que simplemente activar la máquina (ejecuta código arbitrario).
Eso no lo sé.
Power Manager funciona directamente con IOPMQueue para encender su Mac. Power Manager utiliza su propio motor de programación para ejecutar acciones programadas.