编程/9 分钟阅读

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

换了个域名,收录全没了(其实本来就没有多少收录)。好像有许多博客都有推送插件和 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!

发表评论

0 条评论

暂无评论