
Cómo ejecutar una tarea diferente command/script
(Tarea B) en modo paralelo, mientras la tarea principal command/script
(Tarea A) excede la ventana de tiempo/período definido; que se menciona en el crontab
?
@ Entorno de producción, al no tener gnome-terminal
.
Respuesta1
Esto sucederá de forma predeterminada. ejecuciones crontodolos trabajos que están programados para un minuto determinado aproximadamente al mismo tiempo. No hay cola y definitivamente no hay ventana de tiempo/período. Sólo hay un conjunto de horas de inicio.
Respuesta2
Como mencionó l0b0en su respuesta, el archivo crontab solo especifica la hora de inicio de los trabajos. No le importa si el trabajo tarda horas en ejecutarse y felizmente lo iniciará de nuevo cuando llegue la siguiente hora de inicio, incluso si la encarnación anterior del trabajo todavía se está ejecutando.
Según su descripción, parece que desea que la tarea B comience si la tarea A tarda demasiado en ejecutarse.
Puedes lograr esto combinando las dos tareas en un mismo script:
#!/bin/sh
timeout=600 # time before task B is started
lockfile=$(mktemp)
trap 'rm -f "$lockfile"' EXIT INT TERM QUIT
# Start task A
# A "lock file" is created to signal that the task is still running.
# It is deleted once the task has finished.
( touch "$lockfile" && start_task_A; rm -f "$lockfile" ) &
task_A_pid="$!"
sleep 1 # allow task A to start
# If task A started, sleep and then check whether the "lock file" exists.
if [ -f "$lockfile" ]; then
sleep "$timeout"
if [ -f "$lockfile" ]; then
# This is task B.
# In this case, task B's task is to kill task A (because it's
# been running for too long).
kill "$task_A_pid"
fi
fi