일정 시간이 지난 후에 스크립트를 실행할 수 있기를 원합니다. 또한 취소하고 일정을 변경하고 싶습니다. 즉, 기간을 동적으로 늘리고 싶습니다.
이런 생각이 들었습니다 ->
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
파일은 단 한 명의 사용자에게만 쓰기 권한이 있는 위치( /tmp
! 아님)에 배치하는 것이 가장 좋습니다.