![Y분 동안 X분마다 스크립트 실행](https://linux55.com/image/150376/Y%EB%B6%84%20%EB%8F%99%EC%95%88%20X%EB%B6%84%EB%A7%88%EB%8B%A4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%8B%A4%ED%96%89.png)
좋은 아침이에요!
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분 간격으로 스크립트 실행)
참고: 코드를 실행하는 데 걸리는 시간은 고려되지 않습니다. 실행 사이의 간격만 기다립니다.