스크립트를 종료하지 않고 스크립트 실행 시간을 모니터링하고 마일스톤 간격으로 알림을 생성하는 방법은 무엇입니까?

스크립트를 종료하지 않고 스크립트 실행 시간을 모니터링하고 마일스톤 간격으로 알림을 생성하는 방법은 무엇입니까?

스크립트가 마일스톤 간격으로 실행되는 동안 스크립트 실행 시간을 모니터링하고 알림을 생성할 수 있는 방법이 있습니까?

AFAICS는 wait항상 bash에서 차단됩니다.

cron 이메일을 진압하기 위해 STDOUT, STDERR 캡처와 함께 이것을 사용할 계획이지만, 스크립트가 예상 창을 초과하면 (종료하지 않고) 알림을 받고 싶습니다.

Google은 내가 찾고 있는 것이 아닌 time항목 (추가 논리 없이)을 계속해서 알려줍니다 .timeout

답변1

프로세스를 백그라운드에서 실행하고 다음 루프와 같은 것을 사용하여 모니터링하는 것은 어떻습니까? 이 경우 카운터를 설정할 수도 있으며, 예를 들어 필요한 것보다 3배 더 오래 걸리는 경우 프로세스를 종료할 수 있습니다.

# Interval for checking status
readonly interval=10

# Your task here, maybe with some output redirections
sleep 100 &

# Infinite loop
while true
do
    # Chill some time
    sleep "$interval"

    # Check if the background process still exists
    if ps -p "$!" &> /dev/null
    then
        # Do something here, again maybe with >> logfile
        echo "Process is still running!"
    fi
done

답변2

이 줄을 스크립트 앞에 두고 조정할 수 있습니다. 작업 실행의 상태가 in_queue및 와 같이 다른 경우 파일 설명자 started에 해당 신호를 쓰고 &$fdtick타이머는 간격을 두고 신호를 반복하고 1분마다 줄 바꿈을 인쇄합니다. 물론 루프에는 다른 감시 기능이 포함될 수도 있습니다.

노트: >( ... )프로세스 대체라고 하며 bash실행 중인 프로세스와 새 공동 프로세스 사이에 파이프를 만들고 이름을 지정하는 구문입니다. <( ... )생성자가 파이프의 읽기 끝을 보유할 때 동일한 작업이 수행됩니다.

############################################################
#                        VISUAL TIMER                      #
# >$fdtick : tick input file descriptor                    #
# >stderr : visual output                                  #
############################################################
exec {fdtick}> >(
  ((tick = 2, begintime = SECONDS))
  while read -t $tick dot || { (( $? > 128)) && dot=${odot:-#}; }; do
    odot=$dot
    (( lastmin = durationmin, durationtick = (duration = SECONDS - begintime) / tick, durationmin = duration / 60 ))
    while (( durationtick > lasttick )) ; do echo -n "$dot " ; ((lasttick++)) ; done
    (( durationmin == lastmin )) || echo $durationmin
  done >&2
) &&
trap "$(trap -p EXIT)"$'\n'"exec {fdtick}>&-" EXIT


sleep 50 ## long starting step
echo '.'>&$fdtick ## say the script is going on
sleep 50 ## long working step
## terminated, cleanup by trap EXIT

관련 정보