cron

【重学Node.js 第4篇】实现一个简易爬虫&启动定时任务

时间秒杀一切 提交于 2020-05-02 10:01:33
实现一个简易爬虫&启动定时任务 课程介绍看这里: https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址: https://github.com/hellozhangran/happy-egg-server 爬虫 目前 node.js 爬虫工具比较火的有 node-crawler puppeteer 。不过我目前没打算用这些,因为至少现在我们的项目还用不到。只要能发送请求、解析dom我们就能自己实现一个爬虫。所以我选择了axios + cheerio来自己写爬虫。 获取博客园的推荐文章 首先我们用 axios + cheerio 来获取博客园的首页编辑推荐文章,并解析出这篇文章的正文部分。 // controller/crawler.js 文件 const axios = require('axios'); const cheerio = require('cheerio'); // articleCtrl是一个写好了的controller,里面有存储数据到mongo的逻辑。 const articleCtrl = require('./article'); async function cnblogs () { const res = await axios.get('https://www.cnblogs.com/

Golang——Cron 定时任务

馋奶兔 提交于 2020-05-02 09:51:48
开门见山写一个 package main import ( " fmt " " github.com/robfig/cron " " log " " strings " " time " ) func CronTask() { log.Println( " ******** ******* ******* " ) } func CronTest() { log.Println( " Starting Cron... " ) c : = cron.New() c.AddFunc( " * * * * * * " , CronTask) // 2 * * * * *, 2 表示每分钟的第2s执行一次 c.Start() t1 : = time .NewTimer( time .Second * 10 ) // ?time.Second * 10 啥意思? *100行吗? for { select { case <- t1.C: fmt .Println( " Time now: " , time .Now().Format( " 2006-01-02 15:04:05 " )) // 为何要专门制定这个时间 t1.Reset( time .Second * 10 ) } } } func main() { fmt .Println(strings.Repeat( " START " ,

Linux三阶段之六:ansible批量管理服务介绍

假如想象 提交于 2020-05-02 09:43:54
六、ansible批量管理服务介绍 (一)批量管理服务知识介绍 a. ansible是一个基于Python开发的自动化运维工具 b. ansible是一个基于ssh协议实现远程管理的工具 c. ansible软件可以实现多种批量管理操作(批量系统配置、批量软件部署、批量文件拷贝、批量运行命令) saltstack puppet (二)批量管理服务特征介绍 a ansible软件服务端(管理端):不需要启动任何服务 默认服务端不需要任何的配置 b ansible软件客户端(受控端):没有客户端软件安装 (三)ansible软件安装部署 1 .ansible软件自动化环境架构规划 管理主机1台: 10.0.0.61 m01 受控主机3台: 10.0.0.41 backup 10.0.0.31 nfs01 10.0.0.7 web01 Linux系统 6.9 2 ansible软件自动化部署条件 a .ssh密钥对创建(管理主机,建议基于ssh密钥方式建立远程连接) ssh-keygen -t dsa 影响免交互创建密钥对创建因素: 1)需要指定私钥存放路径 -f /root/.ssh/id_dsa 2)需要进行私钥文件密码设定 -N/-P -N ""/-P "" 免交互创建密钥对方法 ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" b

alibaba的springcloud孵化器项目

独自空忆成欢 提交于 2020-05-02 07:12:14
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 主要功能 服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于

Linux学习笔记:ps -ef、ps aux、kill -9

穿精又带淫゛_ 提交于 2020-05-02 04:47:14
一、查看进程命令 1.ps命令   Linux中的ps命令是Process Status的缩写。   ps命令用来列出系统中当前运行的那些进程。   ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。   要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。 Linux上进程有5种状态: 运行(正在运行或在运行队列中等待) 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) ps工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z

PHP Laravel定时任务Schedule

柔情痞子 提交于 2020-05-02 03:56:29
前提:本文方法是利用Linux的crontab定时任务来协助实现Laravel调度(Mac也一样)。 一、首先添加Crontab定时任务,这里只做简单介绍。 用命令crontab -e 添加如下内容 * * * * * /usr/local/bin/php /usr/local/ var/www/projectName/artisan schedule:run >> /dev/ null 2>& 1 1 2 如图: 上面命令Crontab会每分钟去调Laravel的schedule命令,然后Laravel判断执行任务。 注意:要注意php和artisan的目录,which php可以查看php目录 ***** 你的命令 另外上面的命令前面的5个*分别代表分钟、小时、天、月、星期。 分钟:0-59的整数,默认*和*/1 代表1分钟。 小时:0-23的整数。 天:1-31的整数。 月:1-12的整数。 星期:0-7的整数,0和7都代表星期日。 crontab -l 可以列出当前的定时任务。 二、添加Laravel调度任务。 1、在App\Console\Kernel类中定义你的调度任务: <?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Laravel\Lumen\Console

MYSQL定时任务-定时清除备份数据

♀尐吖头ヾ 提交于 2020-05-01 18:21:27
背景 由于项目需要,每个月的历史存量数据需要进行一个归档和备份操作,以及一些日志表需要进行一个明细字段清除,让mysql数据库磁盘节省空间。则需要一些定时任务来定时清理这些数据。 技术选型 Java 可以基于Quartz/Timer来使用定时任务机制来编写定时任务,需要依赖于Java程序 基于Linux下Crontab来基于cron表达式构建定时任务 文档 必定需要编写对应的脚本,但是在这个脚本中,由于需要操作数据库,必定会涉及到明文密码这样的一个数据,这样不是很安全。 由于使用到的是MYSQL数据库,而MYSQL又支持定时任务,所以可以使用MYSQL自带定时任务。 具体操作 mysql配置 由于定时任务这个选项在mysql的默认配置是关闭的,所以保险起见,我们先查询一下该选项是否打开 show variables like '%event_scheduler%'; 如果显示的为 Off 选项,有提供如下两种方式对其进行修改 ​ 1. 语句方式(当前启动的实例有效,重启后无效) set global event_scheduler=1; ​ 2. 配置my.cnf(windows下是my.ini)下添加如下选项 [mysqld] event_scheduler=ON 然后将其保存后重启mysql即可 sql编写 创建存储过程(procedure)[可选

将定时任务cron 解析成中文

拜拜、爱过 提交于 2020-05-01 17:23:53
在使用定时器 quartz 时,其中的cron 表达式,老板表示作为开发的你能看懂外,其他的非开发同事可能看不懂,要用一个他们能看懂的方式表达出来。 还好我们的项目要求的表达式不是特别的麻烦,所以就写了一个简略的转换为中文的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148

时间轮算法 — 转

非 Y 不嫁゛ 提交于 2020-05-01 15:09:44
出处: 那些惊艳的算法们(三)—— 时间轮 从定时任务说起   自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。 大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也是无处不在的:每天凌晨更新一波数据库,每天9点发一波邮件,每隔10秒钟抢一次火车票。。。   至于怎么实现的?很简单啊,操作系统的crontab,spring框架的quartz,实在不行Java自带的ScheduledThreadPool都可以很方便的做到定时任务的管理调度。   当你熟练的敲下“* * 9 * * ?”等着神奇的事情发生时,你是否想过背后的“玄机”? 初识时间轮 大概去年的时候,业务需要实现一个时间调度的工具,定时生成报表,同组的哥们儿想了一个取巧的办法:   1. 启动时从DB读取cron表达式解析,算出该任务下次执行的时间。   2. 下次执行的时间 - 当前时间 = 时间差。   3. 向ScheduleThreadPool线程池中提交一个延迟上面算出来的时间差的执行的任务。   4. 任务执行时,算一下这个任务下次执行的时间,算时间差,提交到线程池。   5. 当任务需要取消时

解析Cron表达式

天大地大妈咪最大 提交于 2020-05-01 15:08:25
1.引入 有些时候我们不但需要定时执行任务,而且需要获得下一次执行的时间。 但是我们执行时间配置的是cron表达式,不能够根据上次执行的时间+执行间隔这种方式来获得。所以我们必须要解析cron 2.方法 Date curTime = new Date(); System.out.println(curTime); CronExpression expression; try { expression = new CronExpression( "0 30 15 * * ?"); Date newDate = expression.getNextValidTimeAfter(curTime); System.out.println(newDate); } catch (ParseException e) { logger.error( "fail to parse cron express", e); } catch (Exception e) { logger.error( "fail to update rule nextTime", e); } 结果为: Wed Jun 24 19:11:52 CST 2015 Thu Jun 25 15:30:00 CST 2015 说明: (1)当然需要引入Quartz的依赖 < dependency> < groupId>org