簡體   English   中英

帶睡眠的 Linux Bash 無限循環

[英]Linux Bash infinite loop with 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

diff 以毫秒為單位返回執行時間。

我現在如何確保腳本休眠

1200 - diff ms

確保 PHP 腳本每小時最多只能調用 3000 次?

首先,您需要一個睡眠,就像 GNU coreutils 中的睡眠一樣,它理解小數秒。 如果你的,那么:

sleep $(echo "1.2 - $diff/1000" | bc -l)

或者,您的循環可以簡化為:

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

另一方面,如果我們想保留經過時間的打印輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM