log

第二十天

爷,独闯天下 提交于 2020-03-08 01:50:05
爬虫 什么是爬虫 通过代码获取网页源码 爬取网页内嵌套的数据 import requests ret= requests.get('https://www.baidu.com') print(ret.content.decode('utf-8')) 正则题目 a开头由只少一个字母组成的字符串 ^a[a-zA-Z]* 以1开头,中间3-5位数字,x结尾,中间的值不超过5位 1\d{3,5}x 以1开头,中间3-5位数字,x结尾,中间的值不超过5位 ^1\d{3,5}x$ re模块的用法 分组命名 (?P正则表达式) 写的时候名字不加引号 ret.group("名字") 用的时候加引号 分组命名的引用 exp=<abc>sadsakdjaskl</abc> ret=re.reach('<(?P<tag>\w+>.*?</(?P=tag)>',exp) print(ret) # sadsakdjaskl 改进 使用分组的索引 ret=re.reach(r'<(?P<tag>\w+>.*?</\1>',exp) 1 普通1 \1 转义 让他 表示特殊意义 \1在python 中 有特殊意义 解决方法1: r'<(?P<tag>\w+>.*?</\1>' 解决方法2: \\n 取消在python中的特殊意义 他在正则中就表示 引用第一组 不希望转义 直接加r re.search(r' \n'

Kafka学习笔记

我们两清 提交于 2020-03-08 01:03:10
zk启动 bin/zkServer.sh start 后台启动kafka bin/kafka-server-start.sh config/server.properties 1 > /dev/null 2 > & 1 & 测试生产者消费者 创建主题 bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic calvin --partitions 2 --replication-factor 1 查看所有主题 bin/kafka-topics.sh --zookeeper localhost:2181 --list 查看对应的主题 bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic calvin 指定生产者发送消息到主题 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic calvin 指定消费者订阅主题 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic calvin 单机版注意一个坑,需要 将server.properties设置advertised

CentOS7 部署Django Celery

寵の児 提交于 2020-03-07 22:54:58
在生产环境中部署Django、Celery项目需要开机启动,因此需要配置系统服务。 下面以CentOS7系统为例,记录配置Django和Celery为系统服务,并开机启动。 1.Django服务 在生产环境中部署Django项目需要用到uwsgi或gunicorn,这里我使用gunicorn。 1.1 Gunicorn简介 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。 Gunicorn 服务器作为wsgi app的容器,能够与各种Web框架兼容(flask,django等),得益于gevent等技术,使用Gunicorn能够在基本不改变wsgi app代码的前提下,大幅度提高wsgi app的性能。 1.2 安装Gunicorn pip3 install gunicorn 1.3 Gunicorn systemd unit 编写/usr/lib/systemd/system/django.service [Unit] Description=django daemon service After=network.target [Service] WorkingDirectory=

Spring Batch

旧时模样 提交于 2020-03-07 22:39:55
yml spring: batch: job: enabled: false #是否自动执行定义的Job,默认是 initialize-schema: never datasource: name: payReportBatch type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:xx username: root password: X18 initial-size: 10 # 初始化大小 min-idle: 10 # 最小数量 max-active: 10 # 最大数量 # 连接等待超时时间 max-wait: 10000 # 配置检测可以关闭的空闲连接间隔时间 time-between-eviction-runs-millis: 60000 # 配置连接在池中的最小生存时间 min-evictable-idle-time-millis: 300000 validation-query: select '1' test-while-idle: true test-on-borrow: false test-on-return: false # 打开PSCache,并且指定每个连接上PSCache的大小 pool-prepared

Git篇(基础)

强颜欢笑 提交于 2020-03-07 21:37:53
   安装过程省略...   至于安装目录的有关功能,略过...    关于初次使用的关键配置命令 :    1、 配置基本信息,该信息将保存在该用户目录下的.gitconfig文件内 配置用户信息$ git config --global user.name "xxx" $ git config --global user.email xxx@example.com配置文本编辑器与差异分析工具$ git config --global core.editor xxx$ git config --global merge.tool xxx查看该配置文件所有配置信息$ git config global --list 如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。      2、 关于仓库的创建、克隆与更新 在工作目录初始化新仓库$ git init从已有仓库克隆项目$ git clone [url] [newname]检查当前文件状态$ git status跟踪新文件(纳入版本控制)$ git add xxx(这是个多功能命令,根据目标文件的状态不同

sofa-bolt源码阅读(5)-日志

浪尽此生 提交于 2020-03-07 20:43:11
6.1 日志类型 bolt的日志文件默认位于/logs/bolt目录下 文件名 说明 common-default.log 普通日志 common-error.log 错误级别日志 connection-event.log 连接相关的日志 remoting-rpc.log rpc协议相关的日志 6.2 日志实现 bolt只依赖SLF4j门面框架,可以支持三种类型的日志实现:log4j, log4j2, 和 logback。运行时根据具体项目引入的日志框架,实现日志的自适应打印。 日志隔离的功能是工具包sofa-common-tools实现的。 日志的入口类是BoltLoggerFactory private static final Logger logger = BoltLoggerFactory.getLogger("CommonDefault"); 获取名称为CommonDefault的日志,这个名称是在日志配置文件中配置的。 <AsyncLogger name="CommonDefault" level="${LOG_LEVEL}" additivity="false"> <appender-ref ref="CommonDefaultAppender"/> <appender-ref ref="ERROR-APPENDER"/> </AsyncLogger> 日志空间

【Linux高频命令专题(11)】cp

柔情痞子 提交于 2020-03-07 18:37:42
概述 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。但是如果是在shell脚本中执行cp时,没有-i参数时不会询问是否覆盖。这说明命令行和shell脚本的执行方式有些不同。 命令格式: cp [选项]... [-T] 源 目的 或:cp [选项]... 源... 目录 或:cp [选项]... -t 目录 源... 命令参数: -a, --archive 等于-dR --preserve=all --backup[=CONTROL 为每个已存在的目标文件创建备份 -b 类似--backup 但不接受参数 --copy-contents 在递归处理是复制特殊文件内容 -d 等于--no-dereference --preserve=links -f, --force 如果目标文件无法打开则将其移除并重试(当 -n 选项 存在时则不需再选此项) -i, --interactive 覆盖前询问(使前面的 -n 选项失效) -H 跟随源文件中的命令行符号链接 -l, --link 链接文件而不复制 -L, --dereference 总是跟随符号链接 -n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效) -P, -

主库配置关于Dataguard Online redo log 和 Standby redo log

只愿长相守 提交于 2020-03-07 12:23:18
发一下牢骚和主题无关: Dataguard 分类: Physical Standby(Redo Apply) Logical Standby(SQL Apply) Dataguard 保护模式: maximize performance(最大性能模式) maximize availability(最大可用模式) maximize protection(最大保护模式) Online redo log 存放着在线事务未归档的变动信息,主库肯定是要配置的。 如果是Physical Standby,对于备库没法open read write,所以备库而言online redo log几乎无用,但是斟酌到备库随时可能切换为主库,就必须配置online redo log; 如果是Logical Standby,备库可以open read write,所以必须配置online redo log。 每日一道理 成功的花朵开放在啊勤劳的枝头,失败的苦果孕育在懒惰的温床之中。 Standby redo log 备库的remote file server(RFS)进程接收到主库传过来的redo data,然后写到standby redo log中,standby redo log的作用类似于主库的online redo log,只是他存在 于备库,只存放主库传过来的redo data

mtail 提取应用日志数据到时序数据库的工具-支持prometheus

我与影子孤独终老i 提交于 2020-03-07 11:07:56
mtail 是谷歌开源的一款很不错的应用日志提取工具,我们可以方便的用来提取应用的数据 到常见的监控系统(prometheus,stats,collectd,gragphite。。。。) 说明: demo 使用此工具转换nginx error message 为prometheus 的metrics 环境准备 docker-compose 文件 version: "3" services: nginx-log: build: ./ ports: - "8090:80" - "3903:3903" volumes: - "./examples/linecount.mtail:/progs/linecount.mtail" ​ nginx dockerfile FROM dalongrong/mtail as builder ​ FROM openresty/openresty:alpine ENV TINI_VERSION v0.18.0 RUN apk add --update \ && apk add --no-cache tini ADD entrypoint.sh /entrypoint.sh ADD mtail.sh /mtail.sh COPY nginx.conf usr/local/openresty/nginx/conf/ COPY --from=builder

用js判断 iPhone6 iPhone6 plus iphonex?

孤街醉人 提交于 2020-03-07 11:02:17
var events = navigator.userAgent;if(events.indexOf('Android')>-1 || events.indexOf('Linux')>-1 || events.indexOf('Adr')>-1){ console.log("安卓手机"); }else if(events.indexOf('iPhone')>-1){ //根据尺寸进行判断 苹果的型号 if(screen.height == 812 && screen.width == 375){// 进行操作,改变样式 const obj = document.getElementById('sendxBtn') obj.setAttribute("style", "padding:5px 10px 20px;") console.log("苹果X"); }else if(screen.height == 736 && screen.width == 414){ console.log("iPhone7P - iPhone8P - iPhone6"); }else if(screen.height == 667 && screen.width == 375){ console.log("iPhone7 - iPhone8 - iPhone6"); }else if(screen