早上好 !
我试图每 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 分钟)
注意:这没有考虑代码运行所需的时间。它只会等待运行之间的间隔时间