在 Y 分钟内每 X 分钟运行一个脚本

在 Y 分钟内每 X 分钟运行一个脚本

早上好 !

我试图每 X 分钟运行一次以下脚本,持续 Y 分钟。基本上,此脚本会输出 5 分钟的 logcat,并检查超过 30 分钟的文件并将其删除。到目前为止,除了使用之外,我还没有找到每 5 分钟循环一次该脚本的方法watch -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

(每 5 分钟运行一次脚本,总共 60 分钟)

注意:这没有考虑代码运行所需的时间。它只会等待运行之间的间隔时间

相关内容