睡眠永远不会继续执行

Sleep never continues execution

我制作了一个脚本来检查服务器的可用性。

该网站已关闭,我正在等待修复(我正在为客户打电话,正在等待提供商的票),以限制我使用过的呼叫 sleep():

$client = new \GuzzleHttp\Client();
$available = false;
date_default_timezone_set('doesntMatter');
//The server was more likely to respond after 5 AM, hence the decrese between intervals
$hours = array( //Minutes between calls based on current hour
  0=>30,
  1=>30,
  2=>30,
  3=>30,
  4=>20,
  5=>20,
  6=>10,
  7=>10,
  8=>10
);
$lastResponse = null;
while(!$available) {
    $time = time();
    $hour = date('G', $time);
    echo "\n Current hour ".$hour;
    try {
        $crawler = $client->request('GET', 'www.someSiteToCheck.com');
        $available = true;  //When the server returns a stus code of 200 available is set to TRUE
    } catch (\GuzzleHttp\Exception\ServerException $e) {}
    if(!$available) {
        $secondsToSleep = $hours[$hour]*60;
        echo "\n Sleeping for ".$secondsToSleep;
        sleep($hours[$hour]*$secondsToSleep); //Sleep until the next request
    } else {
        exec('start ringtone.mp3'); //Blast my stereo to wake me up
    }
}

问题:

当我启动脚本时,它进入 1800 秒睡眠并冻结,它没有重新执行任何东西

鉴于:

  1. 我测试了我的脚本,睡眠时间为 160(例如),它进行了多次调用
  2. 检查了我的电源设置,使机器不会进入待机状态
  3. 检查错误日志
  4. (即使显而易见)我在 CLI 中 运行
  5. 检查了 sleep() 文档中的问题,但没有检查
  6. 找不到任何相关内容

我觉得你的逻辑有问题。 例如: 凌晨 5 点的时候 那么$secondsToSleep就是20*60=1200sec; 当你调用 sleep 函数时,你再次将它乘以 20 sleep($hours[$hour]*$secondsToSleep); => sleep(20*1200); => 24000sec => 6,66... hours

如果您只是更新睡眠参数,结果应该符合预期。

if(!$available) {
    $secondsToSleep = $hours[$hour]*60;
    echo "\n Sleeping for ".$secondsToSleep;
    sleep($secondsToSleep); //Sleep until the next request
}