GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedo ejecutar un trabajo cron con más frecuencia que cada minuto?

Solución 1:

Candidato a la más creativa uso indebido de un comando de Linux:

nohup watch -n 30 --precise yourprog >/dev/null &

Si yourprog consta de:

date +%M.%S.%N >> yourprog.out

entonces yourprog.out podría verse como:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

lo que indica un nivel de precisión bastante bueno.

Aquí hay una explicación de las partes del comando:

  • nohup - Esto mantiene el comando que le sigue, watch en este caso, de salir cuando salga la terminal.
  • watch - Este programa ejecuta un comando repetidamente. Normalmente, la primera pantalla de salida del comando se muestra cada vez que watch ejecuta el comando.
  • -n 30 - El intervalo en el que ejecutar el comando. En este caso es cada treinta segundos.
  • --precise - Sin esta opción, watch ejecuta el comando después intervalo segundos. Con él, cada inicio del comando comienza activado el intervalo si es posible. Si esta opción no se especificara en el ejemplo, los tiempos se retrasarían más de 30 segundos cada vez debido al tiempo que se tarda en iniciar y ejecutar el comando (yourprog ).
  • yourprog - El programa o línea de comando para watch ejecutar. Si la línea de comando contiene caracteres especiales para el shell (por ejemplo, espacio o punto y coma), deberá estar entre comillas.
  • >/dev/null - El mayor que redirige la salida del comando ejecutado por watch a un archivo, /dev/null . Ese archivo descarta cualquier dato escrito en él. Esto evita que la salida se escriba en la pantalla o, desde nohup se está utilizando, evita que la salida se envíe a un archivo llamado nohup.out .
  • & - El watch el comando se ejecuta en segundo plano y el control se devuelve al terminal o al proceso principal.

Tenga en cuenta que nohup , la redirección de la salida y el & el operador de control de fondo no es específico de watch .

Aquí hay una explicación del ejemplo yourprog guión:

  • date - Muestra la fecha y/o la hora actual. También puede configurarlos.
  • +%M.%S.%N - Esto especifica el formato de salida para date usar. %M es el minuto actual, %S es el segundo actual y %N es el nanosegundo actual.
  • >> yourprog.out - Esto redirige la salida del date comando a un archivo llamado yourprog.out . El doble mayor que hace que la salida se agregue al archivo en cada invocación en lugar de que se sobrescriba el contenido anterior.

Editar :

Posiblemente otra cosa de la que se podría abusar (o tal vez sea un uso legítimo) son los temporizadores systemd.

Vea systemd/Timers como reemplazo de cron y Cron vs systemd timers.

Intentaré publicar un ejemplo pronto.

Solución 2:

Si su tarea necesita ejecutarse con tanta frecuencia, cron es la herramienta incorrecta. Además del hecho de que simplemente no iniciará trabajos con tanta frecuencia, también corre el riesgo de sufrir algunos problemas graves si el trabajo tarda más en ejecutarse que el intervalo entre inicios. Vuelva a escribir su tarea para convertirla en daemon y ejecutarla de manera persistente, luego iníciela desde cron si es necesario (mientras se asegura de que no se reinicie si ya se está ejecutando).

Solución 3:

Cron está diseñado para despertarse cada minuto, por lo que no es posible hacerlo sin piratear, por ejemplo, dormir como mencionaste.

Solución 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

No olvide escribir algo en su programa para que salga si ya se está ejecutando una instancia anterior.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Por supuesto, esto todavía deja una oportunidad muy pequeña para fallar, así que busque en Google una mejor solución aplicable a su entorno.

Solución 5:

Puede hacerlo con software de terceros.

Una opción que me ha funcionado bien es frecuente-cron

Permite una precisión de milisegundos y te da la opción de diferir la siguiente ejecución hasta que haya finalizado la actual.


Linux
  1. ¿Cómo ejecutar Cronjobs más de una vez por minuto?

  2. Ejecutar un trabajo cron en Linux cada seis horas

  3. Linux:Ejecutar trabajo cron en primer plano

  4. ¿Por qué no se ejecuta mi trabajo cron.d por minuto?

  5. Ejecutando Cron cada 2 horas

Cómo ejecutar trabajos cron cada 5, 10 o 15 minutos

Cómo programar un trabajo en Cron para que se ejecute cada hora en Ubuntu 20.04

Cómo ejecutar un trabajo Crontab cada semana el domingo

¿Cómo puedo hacer que un trabajo cron se ejecute cada 30 minutos?

¿Cómo puedo programar un trabajo cron que se ejecuta cada 10 segundos en Linux?

¿Cómo ejecutar el trabajo cron en una hora específica todos los días?