我需要每30分钟至少执行一次curl请求以至少一次定位一次。因此,命令将为curl http://localhost:8080

这里要抓住的是,我想在5分钟至30分钟之间随机选择一个时间,然后执行curl命令。伪代码可能看起来像这样

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


详细的答案将是不错的,因为我对linux不太了解。

最佳答案

如果您在脚本之上运行,则必须作为后台进程运行,并确保它不会被某些东西(操作系统,其他用户,...)杀死。

另一种方法是使用cronjob自动触发,但脚本更复杂。

Cronjob设置:

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


Shell脚本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必须具有初始值。对于
  例如,您第一次执行的当前分钟。


**

关于linux - Linux:每50分钟随机运行一条命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45746542/

10-15 02:01