3 votos

Ejecutar Shell scripts en un horario

¿Existe una manera "correcta" de ejecutar los shell scripts en un horario en las versiones modernas de MacOS? Mi método habitual para esto ha sido utilizar el cron pero los cambios recientes hacen parecer esto no está en la mente de Apple estos días.

¿Existe alguna opción mejor que cron para ejecutar programas de forma programada en el MacOS moderno (era Big Sur)? ¿Es mi única opción morder la bala y aprender cómo launchd funciona o hay algo más simple/fácil que pueda utilizar?

1 votos

Apple recomienda utilizar launchd y aunque es un poco complicado aprenderlo de los diversos páginas del manual a su alrededor, launchctl , launchd.plist y launchd hay aplicaciones de terceros que presentan una GUI interfaz a la misma. Uno de los que he utilizado en el pasado es Lingon Sin embargo, hay algunos más por ahí.

1 votos

launchd están sujetos a las mismas restricciones de permisos que cron empleos (véase "Cómo ejecutar un LaunchAgent que ejecuta un script que provoca fallos debido a la Protección de Integridad del Sistema" por ejemplo). Personalmente, no veo ninguna necesidad de cambiar de cron , si es con lo que te sientes más cómodo (al menos en este momento). Pero si necesitas cambiar, launchd es sin duda el sistema al que hay que pasarse.

0 votos

Es bueno saberlo @GordonDavisson - esta pregunta en particular fue provocada por un problema con la creación de un nuevo trabajo cron que fallaba silenciosamente, dejándome adivinar cuál era la causa del fallo y sin poder descartar la Protección de Integridad del Sistema (a pesar de que un segundo trabajo cron se está ejecutando bien). Si launchd sufre el mismo tipo de problemas es bueno saberlo. Un fastidio, pero es bueno saberlo.

3voto

moodforaday Puntos 2633

Si hay un camino "correcto" desde el punto de vista de Apple, entonces es launchd . No es que cron está "mal" por sí mismo pero no es la forma "preferida".

Sin embargo, como ha indicado, launchd puede ser un dolor para trabajar.

Hay dos buenas aplicaciones para probar:

  1. https://www.soma-zone.com/LaunchControl/ ¹

  2. https://www.peterborgapps.com/lingon/

Lingon existe desde hace mucho tiempo y es probablemente más conocido, pero yo me cambié a LaunchControl hace unos años y lo prefiero.

El promotor también mantiene https://launchd.info que es un sitio web de tutoriales muy útil para entender cómo launchd funciona.

LaunchControl también tiene una herramienta incorporada que puede mitigar los problemas relacionados con el acceso total al disco, lo que facilita el manejo de las restricciones de MacOS.


Hay otra opción más sencilla: Maestro del teclado . Keyboard Maestro no sólo tiene una función para ejecutar scripts (o macros, etc) a una hora específica o de forma recurrente cada X minutos, sino que también puede utilizar la sintaxis del estilo de cron si quieres.

Dado que Keyboard Maestro es la mejor herramienta de automatización para el Mac, y que probablemente sacrificaría un dedo antes que verme obligado a usar un Mac sin él, puedes adivinar que recomiendo encarecidamente Keyboard Maestro. Tiene una prueba gratuita (por otras 2 semanas o 30 días, no estoy seguro, pero definitivamente es mucho tiempo) y se mantiene activamente.


¹ En el momento de escribir este artículo, tanto el sitio web de LaunchControl como el de launchd.info parecen no funcionar, lo que supongo que es sólo un fallo temporal. Anoche ya funcionaban. Si todavía está caído cuando lea esto, puede descargar una copia de la última versión (que también tiene una prueba gratuita) desde mi sitio web aquí:

https://iusethis.luo.ma/launchcontrol/LaunchControl-1.52.3.tbz2

2voto

Richard Marquez Puntos 387

Puede seguir utilizando crontab de la misma manera que lo hace en un equipo linux - MacOS no ejecuta un verdadero cron servicio y crontab es sólo una envoltura que delega en launchd ahorrándole la necesidad de molestarse con el Sintaxis XML de launchd (véase Ejecutar un trabajo periódicamente ).

Siga adelante y cree sus entradas cron utilizando sintaxis familiar ejecutando como su usuario habitual:

crontab -e

NOTA : También puede utilizar sudo crontab -e si su tarea necesita ser ejecutada como Root. Sin embargo, debes asegurarte de que el usuario Root tiene acceso a tu script.

Ejemplo de entrada:

0 8 * * * /usr/local/bin/myscript.sh >> /tmp/myscript_errors.log 2>&1

Lista existente crontab entradas:

crontab -l

Cuando las tareas cron generan resultados, MacOS crea entradas de correo local que podrían aparecer como You have new mail notificaciones al abrir un nuevo intérprete de comandos de terminal. Para desactivar los mensajes de correo local añada al principio de su crontab la siguiente línea:

MAILTO=""

PS: Dependiendo de la versión de su MacOS puede que tenga que permitir el acceso completo del disco a /usr/bin/crontab como se describe en esta respuesta .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X