2

誰かがこれを手伝ってくれることを望んでいました.15秒間ループ内にあるものを実行するシェルスクリプトのループが必要です. たとえば

if (true)
    run command for 15 seconds
fi
    kill PID

私はシェルスクリプトを初めて使用するので、これで迷っています。また、違いがある場合は、debian instll を使用しています

どんな助けでも大歓迎です

4

2 に答える 2

3

timeoutコマンドをお探しですか?

于 2012-04-23T08:46:03.063 に答える
0

次の bash スクリプトが役立つ場合があります。スクリプトは、ループを開始する前に初期エポック時間を変数として設定します。ループが実行されている間、追加の変数が現在のエポック時間で設定されます。両方のエポック時間が比較され、差が 15 以下である限り、コマンドは実行され続けます。以下のスクリプトでは、現在実行中のコマンドが「echo "counting ${COUNTER}"」であることに注意してください。目的に合わせてスクリプトのこの部分を変更する必要があります。2 つのエポック時間の差が 15 を超えると、スクリプトは終了します。この時点で kill コマンドを開始する必要があります。エラーが発生した場合は、"YourLogFile" に "ERROR... YourScript.sh failed" が表示されます (ログ ファイルを希望するものに設定してください)。

注: このループ内で実行しようとしているものは、15 秒間に何度も実行される可能性があります。以下のスクリプトをテストとして使用すると、echo コマンドが毎秒 50 回以上実行されることがわかります。

#!/bin/bash

LOOP="true"
INITIAL_TIME=$(date "+%s")

while [[ ${LOOP} == true ]]; do

    CURRENT_TIME=$(date "+%s")
    COUNTER=$(expr ${CURRENT_TIME} - ${INITIAL_TIME})

    if [[ ${COUNTER} -le "15" ]]; then

        echo "counting ${COUNTER}"
        # RUN YOUR COMMAND IN PLACE OF THE ABOVE echo COMMAND

    elif [[ ${COUNTER} -gt "15" ]]; then
        exit 0
            #INITIATE YOUR KILL COMMAND IN PLACE OF OR BEFORE THE exit
    else
        echo "ERROR... YourScript.sh failed" >> /YourLogFile
    fi

done
于 2012-04-23T15:49:56.787 に答える