¿Cómo puedo ejecutar un script cada, digamos 30 minutos? Supongo que hay diferentes formas para diferentes sistemas operativos. Estoy usando OS X.
¿Cómo puedo ejecutar un script cada, digamos 30 minutos? Supongo que hay diferentes formas para diferentes sistemas operativos. Estoy usando OS X.
Respuestas:
Solo usa launchd . Es un sistema de inicio muy potente y, mientras tanto, 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), que es como un cruce entre init
, cron
, at
, SysVinit ( init.d
), inetd
, upstart
y systemd
. Tomando prestados conceptos de todos estos proyectos, pero también ofreciendo cosas que quizás no encuentre 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 deben ejecutarse, sin importar si algún usuario está conectado al sistema o no. Se iniciarán con privilegios de "root".
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 solo se ejecutarán si 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 mediante la 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
, como de costumbre, todo lo que se /System
encuentra debajo es administrado por OS X. No colocará ningún archivo allí, no deberá cambiar ningún archivo allí, a menos que realmente sepa lo que está haciendo. Jugar en la carpeta de Sistemas puede hacer que su sistema sea inutilizable (póngalo en un estado en el que incluso se niegue a reiniciarse). Estos son los directorios donde Apple coloca las launchd
tareas que hacen que su sistema esté en funcionamiento durante el arranque, inician automáticamente los servicios según sea necesario, realizan tareas de mantenimiento del sistema, etc.
Cada launchd
tarea hay un archivo en formato plist. Debe tener la notación de nombre de dominio inversa. Por ejemplo, puede nombrar su tarea
com.example.my-fancy-task.plist
Esta lista puede tener varias opciones y configuraciones. Escribir una 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 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 pagar por ella, en serio, obtenga la versión que no es de la tienda de aplicaciones. versión). Si alguien conoce una herramienta comparable que sea gratuita o de código abierto, escríbame en los comentarios y la recomendaré (no quiero publicitar aquí para software comercial).
Solo como 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 hacer que la tarea se ejecute en ciertas fechas / horas (básicamente, launchd puede hacer todo lo que cron puede hacer) o incluso puede deshabilitar "OnDemand", lo que hace que launchd mantenga el proceso en ejecución permanente (si se cierra o falla, launchd lo reiniciará inmediatamente) . Incluso puede limitar la cantidad de recursos que puede usar un proceso (como se dijo antes, Lingon muestra todas estas configuraciones en una interfaz de usuario agradable).
Actualización: aunque OnDemand
todavía se admite, está obsoleto. Se nombra la nueva configuración KeepAlive
, lo que tiene mucho más sentido. Puede tener un valor booleano, en cuyo caso es exactamente lo contrario de OnDemand
(ajuste a false
comporta como si OnDemand
es 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 brindan un control más detallado bajo qué circunstancias se mantendrá viva la tarea. Por ejemplo, solo se mantiene vivo 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á activa.
También puede habilitar / deshabilitar tareas manualmente a través de la línea de comando:
launchctl <command> <parameter>
El comando puede ser cargar o descargar, para cargar un plist o descargarlo nuevamente, en cuyo caso el parámetro es la ruta al archivo. O el comando puede ser iniciar o detener, para simplemente iniciar o detener dicha 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 el formato plist y la launchctl
herramienta de línea de comandos (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)
StartCalendarInterval
con una matriz de dos diccionarios, ambos con la clave Minute
y un valor de once 00
y once 30
harían exactamente lo que solicitó. En el futuro, haga preguntas como preguntas, no como comentarios, luego también puedo mostrarle el diccionario final (no puedo hacer eso en un comentario). Este sitio se trata de hacer preguntas. Si desea insinuar a alguien sobre la pregunta, publique el enlace a la pregunta como comentario, pero no la pregunta en sí.
puede utilizar el generador plist muy conveniente: http://launched.zerowidth.com/ (no es necesario comprar nada…)
le dará una sola línea de shell para registrar un nuevo trabajo programado con el launchd ya recomendado
En MacOSX, tiene al menos las siguientes opciones:
Por 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 eso puede ser algo que prefiera).
Como señaló Mecki, launchd sería el camino a seguir. Hay una interfaz GUI para launchd llamada Lingon que es posible que desee consultar, 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...]
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 la configuración más común disponible 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ú.
MAC OS tiene una herramienta Automator que es la misma que la del Programador de tareas en Windows. Y al usar Automator, puede programar tareas a diario y vincular la tarea con un evento de calendario recurrente para ejecutar scripts en un tiempo específico diariamente. consulte el enlace para ejecutar scripts a diario en Mac OS
Para los scripts de Apple, configuro un calendario iCal especial y utilizo alarmas para ejecutarlos periódicamente. Para las herramientas de línea de comandos, utilizo launchd.
FYI: si bien extraño su simplicidad, cron es una cosa del pasado en OS X. Era un perro guardián en Panther. Desde Tiger se ha lanzado. Entonces, si está ejecutando Leopard cron no es una opción.
Puede usar cron para programar tareas.
crontab -e
Un trabajo se especifica en el siguiente formato.
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
Ejemplo:
0 12 * * * cd ~/backupfolder && ./backup.sh
Una vez que haya instalado sus tareas cron, puede usar crontab -l para listar sus tareas.
crontab -l
Si desea saber más sobre las expresiones de programación cron, puede acceder
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html