一定期間後に実行するためにキャンセル可能なスクリプトをスケジュールする

一定期間後に実行するためにキャンセル可能なスクリプトをスケジュールする

一定時間が経過した後にスクリプトを実行できるようにしたいです。また、キャンセルしてスケジュールを変更したいです。つまり、期間を動的に増やしたいのです。

こんな気がしました ->

stop_prev_instance.sh; sleep 60 && /etc/init.d/myscript reload

私の問題は、コマンドの実行中ではなく、stop_prev_instance.sh以前の実行の実行中にのみ停止する必要があることです。sleep/etc/init.d/myscript reload

この問題を解決する正しい方法は何ですか?

答え1

たぶん、このような「キャンセルとリロード」スクリプトを使用することもできますlockfile(procmailプロジェクトで)。

#!/bin/bash

SLEEP=$1
LOCKFILE="/tmp/reload.lock"
MYPID=$$
MYNAME=$(basename "$0")

lockfile "$LOCKFILE"
# kill all other scripts with the same name
KILLPIDS=$(pgrep "^${MYNAME:0:12}" | grep -v "^$MYPID\$")
kill $KILLPIDS 2>/dev/null
rm -f "$LOCKFILE"

sleep "$SLEEP"

lockfile "$LOCKFILE"
/etc/init.d/myscript reload
rm -f "$LOCKFILE"

最大一つスクリプトは、lockfileコマンドrm間で実行されます。

このreload-lockファイルは、1人のユーザーだけが書き込み権限を持つ場所(/tmp!以外)に配置するのが最善です。

関連情報