일정 기간 후에 실행되도록 취소 가능한 스크립트 예약

일정 기간 후에 실행되도록 취소 가능한 스크립트 예약

일정 시간이 지난 후에 스크립트를 실행할 수 있기를 원합니다. 또한 취소하고 일정을 변경하고 싶습니다. 즉, 기간을 동적으로 늘리고 싶습니다.

이런 생각이 들었습니다 ->

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"

최대하나스크립트는 lockfilerm명령 사이에서 실행됩니다.

reload-lock파일은 단 한 명의 사용자에게만 쓰기 권한이 있는 위치( /tmp! 아님)에 배치하는 것이 가장 좋습니다.

관련 정보