我需要每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/