一定時間が経過した後にスクリプトを実行できるようにしたいです。また、キャンセルしてスケジュールを変更したいです。つまり、期間を動的に増やしたいのです。
こんな気がしました ->
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
!以外)に配置するのが最善です。