通过Leancloud的云引擎可以简单部署我们的程序,而不需要我们自己的服务器,但是免费版会有休眠时间,本文介绍让Leancloud云引擎不休眠的办法。
简介
Leancloud是国内领先的 BaaS 提供商,为移动开发提供强有力的后端支持。 通过Leancloud提供的云引擎,我们可以简单的部署我们的程序,而不需要关心运维和服务器的情况。
问题描述
根据其文档(leancloud文档)所述
- 如果应用最近一段时间(半小时)没有任何外部请求,则休眠
- 休眠后如果有新的外部请求实例则马上启动。访问者的体验是第一个请求响应时间是 2 ~ 10 秒(视实例启动时间而定),后续访问响应速度恢复正常。
- 强制休眠:如果最近 24 小时内累计运行超过 18 小时,则强制休眠。此时新的请求会收到 503 的错误响应码,该错误可在 云引擎 > 统计 > Status 页面 中查看。
因为我们使用的是免费的云引擎,所以当网站或应用在半个小时内没有人访问的时候,Leancloud会将我们的应用休眠,当有外部请求的时候再恢复。 虽然时间不长,但对用户的体验不够好。 所以我们需要一个策略来定期访问的应用,防止它休眠。
解决方法
我的云引擎上面部署的是一个api接口服务,用于给我的微信小程序提供支持。
之所以将服务部署到Leancloud上,而不是云服务器上,是因为Leancloud的云引擎在部署之后会提供一个https的备案过的二级域名。
由于我的身份证用于公司网站的备案了,国内规定一个身份证只能给一个网站备案,导致我的域名没办法备案。而微信小程序规定只能使用https的备案的域名,所以只能选择Leancloud的云引擎来提供服务了。
我的解决方法是通过定时任务定期是访问的我的服务,让Leancloud不休眠应用。
下面贴出我的代码:
<?php
date_default_timezone_set('Asia/Shanghai');
$hour = date("H");
//每天00:00 -- 06:00 休眠应用
if($hour >= '00' && $hour <='06'){
die('休眠时间');
}
//换成你leancloud配置的域名
$url = 'https://guan.leanapp.cn/';
$result = file_get_contents($url);
var_dump($result);
将上面的文件保存成leanCrontab.php文件,上传到服务器上。
在服务器上执行
php leanCrontab.php
可以看到输出部署在leancloud上的应用的信息,如我的就是
hello
接着配置linux服务器的定时任务
在ssh终端上输入
crontab -e
进入crontab编辑界面
crontab格式如下
- 第1列分钟1~59
- 第2列小时1~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~6(0表示星期天)
- 第6列要运行的命令
由于Leancloud是每半小时没有访问时休眠,所以我们的脚本需要每二十分钟启动一次。
脚本如下:
20 * * * * *
接着需要添加执行的命令
php /path/leanCrontab.php
其中,path是leanCrontab.php这个文件的路径。
完整的配置如下:
20 * * * * * php /path/leanCrontab.php
用:wq来保存退出,同vim一样。
之后脚本就会在后台定时执行了。我们的应用就不会休眠了。
后记
当然,我这种方法不具备通用性,毕竟有服务器了,干嘛还用leancloud来搭建网站。
但我这是在不备案的情况下能找到的最好的解决方法了。
当然了,如果你有这方面的需求,给我发邮件或者留言,我可以在我的服务器上给你添加上定时任务,欢迎给我发邮件。
我的邮箱地址: guansixu#vip.qq.com
Comments