単一のCronジョブで並列スクリプトを実行する

単一のCronジョブで並列スクリプトを実行する

command/script注ジョブ(ジョブA)がで定義されている定義されたタイムウィンドウ/期間を超えるcommand/scriptと、並列モードで他のジョブ(ジョブB)をどのように実行できますかcrontab

@プロダクション環境、いいえgnome-terminal

答え1

これはデフォルトで発生します。実行する計画みんな同じ時間に特定の分間スケジュールされたタスク。キューもなく、時間ウィンドウ/スロットもまったくありません。開始時間セットは1つだけです。

答え2

l0b0が述べたように彼の答えに、crontabファイルはジョブ開始時刻のみを指定します。以前のバージョンのジョブがまだ実行中であっても、ジョブの実行に数時間かかり、次の開始時間になると、ジョブを再開しても問題ありません。

あなたの説明によると、タスクAを実行するのに時間がかかりすぎる場合は、タスクBを開始したいようです。

同じスクリプトで2つのタスクを組み合わせることでこれを達成できます。

#!/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

関連情報