시간 초과 후 bash 스크립트를 자동으로 종료하는 방법은 무엇입니까?

시간 초과 후 bash 스크립트를 자동으로 종료하는 방법은 무엇입니까?

다음과 같은 많은 작업을 수행하는 bash 스크립트가 있습니다 script.sh.

#!/bin/bash
#It
#Is
#Doing
#Things

스크립트 내에서 스크립트의 프로세스 ID를 가져온 다음 5분 후에 종료할 수 있는 방법이 있습니까?

좋다:

#!/bin/bash
#Get pid of script.sh here, start a 5 minute timer and kill the script after time runs out
#It
#Is
#Doing
#Things

답변1

timeoutGNU coreutils의 유틸리티는 다음을 수행합니다.

timeout 5m bash script.sh

스크립트는 실행 후 5분 후에 종료됩니다.

답변2

를 통해 PID를 얻을 수 있습니다 PID=$$.

당신이 원하는 것은 아마도 명령을 사용하여 가장 쉽게 얻을 수 있을 것입니다 timeout.

그러나 백그라운드 프로세스를 실행할 수도 있습니다.

(sleep $TIMEOUT && kill "$PID") &

답변3

항상 5분 후에 스크립트가 시간 초과되도록 하려면 아래와 같이 백그라운드 프로세스에서 블록을 사용하면 됩니다. Ctrl+C실행 중에 백그라운드 프로세스를 사용 하면 백그라운드 프로세스도 종료됩니다.

#!/bin/bash
{
    sleep 5m
    kill $$
} &

while true
do
    date
    sleep 1
done

답변4

확인 조건을 사용할 수 있습니다.

#!/bin/bash

START=$(date +%s)

while [[ $(($(date +%s) - $START)) -lt 300 ]]
do
    #do something here
done

echo QUIT

설명하다

  • date +%s에포크 이후의 초 수를 가져와 START스크립트 시작 시간을 표시하는 변수에 저장합니다.
  • [[ $(($(date +%s) - $START)) -lt 300 ]]: 현재 시간에서 date +%s시작 시간을 뺀 값을 (다시) 얻습니다( START변수에 저장됨).
  • 결과가 5분 미만이면 300스크립트가 계속 실행됩니다.
  • 결과가 같거나 크면 300시작 시간 이후 스크립트가 실행 중임을 의미하며 루프를 5 minutes종료 while하고 스크립트가 종료됩니다.

관련 정보