
Wie führt man eine andere Aufgabe command/script
(Aufgabe B) im Parallelmodus aus, während die primäre Aufgabe command/script
(Aufgabe A) das definierte Zeitfenster/den definierten Zeitraum überschreitet, der im Abschnitt erwähnt wird crontab
?
@ Produktionsumgebung, nicht vorhanden gnome-terminal
.
Antwort1
Dies geschieht standardmäßig. Cron läuftalledie Jobs, die für eine bestimmte Minute ungefähr zur gleichen Zeit geplant sind. Es gibt keine Warteschlange und definitiv kein Zeitfenster/Zeitraum. Es gibt nur eine Reihe von Startzeiten.
Antwort2
Wie l0b0 erwähntein seiner Antwort, die Crontab-Datei gibt nur die Startzeit von Jobs an. Es ist ihr egal, ob die Ausführung des Jobs Stunden dauert, und sie startet ihn problemlos erneut, wenn die nächste Startzeit erreicht ist, selbst wenn die vorherige Inkarnation des Jobs noch läuft.
Ihrer Beschreibung zufolge möchten Sie, dass Aufgabe B gestartet wird, wenn die Ausführung von Aufgabe A zu lange dauert.
Dies erreichen Sie, indem Sie die beiden Aufgaben in ein und demselben Skript kombinieren:
#!/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