Linux Bash 无限循环与睡眠

And*_*ger 2 linux bash sleep

我正在运行 Bash 脚本来执行 PHP 文件。

while true
do
    date1=$(date +%s%N | cut -b1-13)
    php /var/www/html/sprint/yii hello/validate
    wait
    date2=$(date +%s%N | cut -b1-13)
    diff=$(($date2-$date1))
    echo "$diff ms"
done
Run Code Online (Sandbox Code Playgroud)

diff 给我返回以毫秒为单位的执行时间。

我现在如何确保脚本休眠

1200 - diff ms
Run Code Online (Sandbox Code Playgroud)

确保PHP脚本每小时最多只调用3000次?

Joh*_*024 5

首先,您需要一个睡眠,就像 GNU coreutils 中的睡眠一样,它可以理解秒的小数部分。如果你的这样做,那么:

sleep $(echo "1.2 - $diff/1000" | bc -l)
Run Code Online (Sandbox Code Playgroud)

或者,您的循环可以简化为:

while true
do
        date1=$(date +%s%N)
        php /var/www/html/sprint/yii hello/validate
        wait
        date2=$(date +%s%N)
        sleep $(echo "1.2 - ($date2-$date1)/1000000000" | bc -l)
done
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我们想保留经过时间的打印输出:

while true
do
        date1=$(date +%s%N)
        php /var/www/html/sprint/yii hello/validate
        wait
        diff=$(echo "($(date +%s%N) - $date1)/1000000" | bc -l)
        echo "That took $diff milliseconds."
        time sleep $(echo "1.2 - ($diff)/1000" | bc -l)
done
Run Code Online (Sandbox Code Playgroud)