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分間隔でスクリプトを実行)

注:コードの実行にかかる時間は考慮されません。実行間の間隔だけ待ちます。

関連情報