Y분 동안 X분마다 스크립트 실행

Y분 동안 X분마다 스크립트 실행

좋은 아침이에요!

Y분 동안 X분마다 다음 스크립트를 실행하려고 합니다. 기본적으로 이 스크립트는 5분 분량의 logcat을 출력하고 30분 이상 지난 파일을 확인하여 삭제합니다. 지금까지 나는 다음을 사용하는 것 외에는 이 스크립트를 5분마다 반복하는 방법을 찾지 못했습니다.시계 -n 300 Script.sh

  timeout 5m adb shell logcat > ~/ADB/"$(date +%F_%H-%M-%S)".txt

  find ~/ADB/ -type f -name '*.txt' -mtime +30m -exec rm {} \;

지금까지 while 루프를 사용해 보았지만 매초마다 스크립트가 쌓입니다. 작동하는 유일한 방법은 터미널에서 watch -n 300 Script.sh를 사용하는 것입니다. 5분 동안 5분마다 스크립트가 실행되도록 한 다음 30분보다 오래된 파일을 확인하여 삭제하지만 시작 시 실행할 수 있는 스크립트에 모든 내용을 넣고 싶습니다.

편집하다:

while true;
do
timeout 5m adb shell logcat > ~/ADB/"$(date +%F_%H-%M-%S)".txt
find ~/ADB/ -type f -name '*.txt' -mtime +30m -exec rm {} \;
done

답변1

아마도 cron 작업이 지속적으로 실행되기를 원하는 것처럼 보이는 더 나은 작업일 것입니다. 그러나 종료 시간을 설정해야 하고 연속 루프를 실행하려는 경우 다음과 같이 할 수 있습니다.

#!/bin/bash

while getopts i:d: opt; do
    case $opt in
        i)  interval=$OPTARG;;
        d)  duration=$OPTARG;;
    esac
done

now=$(date '+%s')
interval=$((interval*60))
end=$(date -d "+ $duration minutes" '+%s' || date -v+"$duration"M '+%s')

until ((now>=end)); do
    stuff

    sleep "$interval"
    now=$(date '+%s')
done

다음과 같이 실행할 수 있습니다.

./script.sh -i 5 -d 60

(총 60분 동안 5분 간격으로 스크립트 실행)

참고: 코드를 실행하는 데 걸리는 시간은 고려되지 않습니다. 실행 사이의 간격만 기다립니다.

관련 정보