使用 cron 编写 nodejs 定时推送任务

  in   tech with  0  comment

换了个域名,收录全没了(其实本来就没有多少收录)。好像有许多博客都有推送插件和 sitemap,看了一下百度站长工具说明中,主动推送是最快的。

以下示例适用于Thinkjs2.x

ThinkJS文档中 定时任务 也详细讲了如何编写一个 nodejs 定时任务,那就开始研究研究吧。
推送任务

主要依赖 request 模块,request 模块能够在 nodejs 中很方便的构造 post 和 get 请求,同时支持 http 和 https。

安装:npm install request

然后看一下推送的API文档

看起来挺简单,而且提供的有demo,对php还算熟悉,对着比葫芦画瓢吧。

在 home 模块新建了一个 cron 控制器文件用来存放所有的定时任务,然后添加一个 push 方法。

//百度推送 async pushAction() { var request = think.require('request'); var url = 'http://data.zz.baidu.com/urls?site=hersface.com&token=xxxxxxxx'; var map = { ispage: 1, status: 1 }; var data = await this.model('contents').getList(map, 1, 50); var list = []; for (let k in data['data']) { if (!think.isEmpty(data['data'][k]['url'])) { list.push('http://hersface.com/page/' + data['data'][k]['url'] + '.html'); } else { list.push('http://hersface.com/page/' + data['data'][k]['id'] + '.html'); } } request.post(url, { form: list.join('\n') }, function(error, response, body) { if (!error && response.statusCode == 200) { console.log(body); this.end(body); } }); }

先在浏览器测试一下,打开 /cron/push ,控制台输出了结果

对比文档,成功!
定时任务

定时任务主要使用系统的 crontab 功能。安装:

# yum install vixie-cron
# yum install crontabs

vixie-cron软件包是cron的主程序;crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

如果没有意外,出来一坨代码后就安装成功了。然后 cd 到项目目录,新建 crond 文件夹编写一个简单的脚本

cd /home/wwwroot/www.hersface.com/;
node www/production.js home/cron/push;

运行测试一下,

启动 cron 服务
/sbin/service crond start

crontab -e 编写任务
0 */24 * * * /bin/sh /home/wwwroot/www.hersface.com/crontab/push.sh # 24 小时执行一次

OK!

Responses