2017-08-17 4 views
-1

30分ごとに少なくとも1回、ロカホストへのカール要求を実行する必要があります。したがってコマンドはcurl http://localhost:8080になります。Linux:ランダムに50分ごとにコマンドを実行します。

ここでキャッチするのは、ランダムに時間を5分〜30分の間で選択してから、curlコマンドを実行することです。擬似コードはこのように見えるかもしれません。

while(true) 
n = random number between 5-30 
run curl http://localhost:8080 after 'n' minutes 

私はLinuxについて多くの知識を持っていないので詳細な答えはいいと思います。

答えて

0
while true; do 
    sleep $(((RANDOM%25+5)*60)) 
    curl http://localhost:8080 
done 
+0

は、どのように私はこのコードを呼び出すのですか?上記のコードを実行した後も常に端末を開いたままにしておく必要がありますか? – asdlfkjlkj

+0

https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup – user3486184

1

スクリプト上で実行する場合は、バックグラウンド・プロセスとして実行して確認してくださいそれが何か(OS、他のユーザー、...)

によって殺されることはありませんもう一つの方法は、トリガーにcronジョブを使用しているしなければなりません自動的にスクリプトが複雑になります。

cronジョブの設定:

* * * * * bash test_curl.sh >> log_file.log 

シェルスクリプトtest_curl.sh:

#!/bin/bash 

# Declare some variable 
EXECUTE_TIME_FILE_PATH="./execute_time" 

# load expected execute time 
EXPECTED_EXECUTE_TIME=$(cat $EXECUTE_TIME_FILE_PATH) 

echo "Start at $(date)" 

# calculate current time and compare with expected execute time 
CURRENT_MINUTE_OF_TIME=$(date +'%M') 

if [[ "$EXPECTED_EXECUTE_TIME" == "$CURRENT_MINUTE_OF_TIME" ]]; 
then 
    curl http://localhost:8080 
    # Random new time from 5 -> 30 
    NEXT_RANDOM=$((RANDOM%25+5)) 
    # Get current time 
    CURRENT_TIME=$(date +'%H:%M') 
    # Calculate next expected execute time = Current Time + Next Random 
    NEXT_EXPECTED_EXECUTE_TIME=$(date -d "$CURRENT_TIME $NEXT_RANDOM minutes" +'%M') 
    # Save to file 
    echo -n $NEXT_EXPECTED_EXECUTE_TIME > $EXECUTE_TIME_FILE_PATH 
    echo "Next Executed time is $(date -d "$CURRENT_TIME $NEXT_RANDOM minutes" +'%H:%M')" 
else 
    echo "This $(date +'%H:%M') is not expected time to run test" 
fi 

echo "End at $(date)" 

あなたは簡単にそれを読むことができますので、私はラインでコメントアウト。 **

更新:重要度:ファイルexecute_timeには初期値が必要です。 の例では、初めて実行したときの現在の分です。

**

関連する問題