
Как выполнить другую задачу command/script
(Задачу-B) в параллельном режиме, в то время как основная задача command/script
(Задача-A) превышает заданное временное окно/период; который упомянут в crontab
?
@ Производственная среда, не имеющая gnome-terminal
.
решение1
Это произойдет по умолчанию. Cron запускаетсявсезадания, которые запланированы на заданную минуту примерно в одно и то же время. Очереди нет, и определенно нет временного окна/периода. Есть только набор времени начала.
решение2
Как сказал l0b0в своем ответе, файл crontab определяет только время начала заданий. Его не волнует, что выполнение задания займет несколько часов, и он с радостью запустит его снова, когда наступит следующее время запуска, даже если предыдущее воплощение задания все еще выполняется.
Из вашего описания следует, что вы хотите, чтобы задача B запускалась, если выполнение задачи A занимает слишком много времени.
Этого можно добиться, объединив две задачи в одном сценарии:
#!/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