睡眠永远不会继续执行
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 秒睡眠并冻结,它没有重新执行任何东西
鉴于:
- 我测试了我的脚本,睡眠时间为 160(例如),它进行了多次调用
- 检查了我的电源设置,使机器不会进入待机状态
- 检查错误日志
- (即使显而易见)我在 CLI 中 运行
- 检查了 sleep() 文档中的问题,但没有检查
- 找不到任何相关内容
我觉得你的逻辑有问题。
例如:
凌晨 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
}
我制作了一个脚本来检查服务器的可用性。
该网站已关闭,我正在等待修复(我正在为客户打电话,正在等待提供商的票),以限制我使用过的呼叫 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 秒睡眠并冻结,它没有重新执行任何东西
鉴于:
- 我测试了我的脚本,睡眠时间为 160(例如),它进行了多次调用
- 检查了我的电源设置,使机器不会进入待机状态
- 检查错误日志
- (即使显而易见)我在 CLI 中 运行
- 检查了 sleep() 文档中的问题,但没有检查
- 找不到任何相关内容
我觉得你的逻辑有问题。
例如:
凌晨 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
}