실행되고 있지 않은 프로세스 목록을 에코합니다.

실행되고 있지 않은 프로세스 목록을 에코합니다.

이 서버에서 필요한 프로세스를 시작하기 위해 파일을 참조하는 스크립트를 개발했습니다. 180초 후에 스크립트 시간이 초과됩니다. 스크립트 끝에서 180초 내에 시작되지 않은 프로세스를 표시하고 싶습니다. 어떻게 이를 달성할 수 있나요?

참조 문서 ref.txt:

#TEST:process1
#TEST:process2
TEST:Process3
TEST:process4
TEST:process5

필요한 프로세스를 시작하는 스크립트의 명령줄은 다음과 같습니다.

grep "TEST:" /products/test/ref.txt | while read LINE (Selects process3,4,5 to start)
do
PROC_NAME=$(echo ${LINE} | awk -F ':' '{print $2}')
echo "Starting the required process"
echo "<command line to start the processes>"
done 

#Giving script 180 seconds to start the processes

(( START_TIME = 0 ))
until [ ${START_TIME} -gt 180 ]
do 
greps for the processes running
echo " N number of processes are running"
<I want to display the processes which have not started here>
done

180초 후에 스크립트 시간이 초과됩니다.

180초 후에도 시작되지 않은 프로세스를 표시하는 로직을 추가해야 합니다. 어떻게 해야 합니까?

답변1

bashor 와 유사한 쉘이 있다고 가정하십시오 ksh.

max_time=3

SECONDS=0

IFS=$'\n:'

grep -v '^#' ref.txt |
while read tag cmd; do
    if (( SECONDS < max_time )); then
        echo "starting '$cmd' (tag is '$tag')"
        sleep 2 # for simulation purposes
    else
        echo "did not have time to start '$cmd' (tag is '$tag')"
    fi
done

그러면 다음과 같은 출력이 제공됩니다.

$ ksh script.sh
starting 'Process3' (tag is 'TEST')
starting 'process4' (tag is 'TEST')
did not have time to start 'process5' (tag is 'TEST')

스크립트는 파일에서 ref.txt주석 처리되지 않은 모든 줄을 선택하고 분할하여 :명령에서 초기 마크업을 분리합니다.

스크립트가 아직 시간 초과되지 않은 경우 현재 읽기 프로세스가 시작됩니다( sleep여기서는 호출로 시뮬레이션됨).

시간이 너무 오래 걸리면 추가 프로세스가 시작되지 않지만 아직 시작되지 않은 프로세스가 보고됩니다.

시간 초과는 비동기적으로 발생하지 않습니다. 즉, 스크립트는 몇 초 이상 소요되는 경우 프로세스 시작을 중단하지 않습니다 max_time.

SECONDS변수에는 쉘이 시작된 이후의 시간(초)이 포함됩니다. 이 경우에는 마지막으로 0으로 설정된 이후의 시간(초)이 포함됩니다.

답변2

180초 후에도 시작되지 않은 프로세스를 표시하는 논리입니다. 쉘이 Bourne 쉘이라고 가정합니다. 나는 테스트 bash했고zsh

# ...

# generate a timestamp in seconds since UNIX epoch
START_TIME=$(date '+%s')
until [[ $(date +%s) -gt $((START_TIME + 180)) ]]
do 
    # greps for the processes running
    echo " N number of processes are running"
    #<I want to display the processes which have not started here>
done

# ...

관련 정보