kan进博客 - 2020年9月
type: channel
link: https://kjwoo.cn/2020/09/
description: 我就是我
items: js计算本地缓存
items: ssl问题
items: 省份、城市、区/县 关系
items: html中资源文件添加版本号
items: docker 使用
items: pm2使用
items: 服务器管理
items: PHP docker 配置
items: Java小技巧

js计算本地缓存
type: item
date: 2020-09-28T06:39:00+00:00
description: 主要的思想：获取所有子项长度，进行叠加得出缓存使用的大小function getStorageSize(storage){ if(typeof storage !== 'object' || storage === null){ throw new Error('计算的缓存不合法'); }else{ var size = 0; for(item in storage) { if(storage.hasOwnProperty(item)) { size += storage.getItem(item).length; } } return Number((size / 1024).toFixed(2)); } } var localSize = getStorageSize(window.localStorage); console.log('localStorage当前大小', localSize, 'kb'); var sessionSize =getStorageSize(window.sessionStorage); console.log('sessionStorage当前大小', sessionSize, 'kb');

ssl问题
type: item
date: 2020-09-20T23:48:00+00:00
description: 连接数限制ssh_exchange_identification: read: Connection reset by peer应急方案应急方案1、 重启服务器（估计远程连接也连接不了的话）应急方案2、关闭ssh连接（如果可以进行远程连接）systemctl restart sshd解决方案vi /etc/ssh/sshd_config把MaxStartups值改为1000重启SSH服务，/etc/rc.d/init.d/sshd restart查看端口连接数查看22端口的连接数netstat -nat|grep -i '22' |wc -l

省份、城市、区/县 关系
type: item
date: 2020-09-17T07:42:41+00:00
description: export const province = [{ value: 110000, text: '北京', parentId: 0 }, { value: 120000, text: '天津', parentId: 0 }, { value: 130000, text: '河北省', parentId: 0 }, { value: 140000, text: '山西省', parentId: 0 }, { value: 150000, text: '内蒙古自治区', parentId: 0 }, { value: 210000, text: '辽宁省', parentId: 0 }, { value: 220000, text: '吉林省', parentId: 0 }, { value: 230000, text: '黑龙江省', parentId: 0 }, { value: 310000, text: '上海', parentId: 0 }, { value: 320000, text: '江苏省', parentId: 0 }, { value: 330000, text: '浙江省', parentId: 0 }, { value: 340000, text: '安徽省', parentId: 0 }, { value: 350000, text: '福建省', parentId: 0 }, { value: 360000, text: '江西省', parentId: 0 }, { value: 370000, text: '山东省', parentId: 0 }, { value: 410000, text: '河南省', parentId: 0 }, { value: 420000, text: '湖北省', parentId: 0 }, { value: 430000, text: '湖南省', parentId: 0 }, { value: 440000, text: '广东省', parentId: 0 }, { value: 450000, text: '广西壮族自治区', parentId: 0 }, { value: 460000, text: '海南省', parentId: 0 }, { value: 500000, text: '重庆', parentId: 0 }, { value: 510000, text: '四川省', parentId: 0 }, { value: 520000, text: '贵州省', parentId: 0 }, { value: 530000, text: '云南省', parentId: 0 }, { value: 540000, text: '西藏自治区', parentId: 0 }, { value: 610000, text: '陕西省', parentId: 0 }, { value: 620000, text: '甘肃省', parentId: 0 }, { value: 630000, text: '青海省', parentId: 0 }, { value: 640000, text: '宁夏回族自治区', parentId: 0 }, { value: 650000, text: '新疆维吾尔自治区', parentId: 0 }, { value: 710000, text: '台湾省', parentId: 0 }, { value: 810000, text: '香港特别行政区', parentId: 0 }, { value: 820000, text: '澳门特别行政区', parentId: 0 }]; export const city = [{ value: 110100, text: '北京市', parentId: 110000 }, { value: 120100, text: '天津市', parentId: 120000 }, { value: 130100, text: '石家庄市', parentId: 130000 }, { value: 130200, text: '唐山市', parentId: 130000 }, { value: 130300, text: '秦皇岛市', parentId: 130000 }, { value: 130400, text: '邯郸市', parentId: 130000 }, { value: 130500, text: '邢台市', parentId: 130000 }, { value: 130600, text: '保定市', parentId: 130000 }…

html中资源文件添加版本号
type: item
date: 2020-09-14T08:02:00+00:00
description: node脚本(使用git里面的提交号作为文件的版本号)给html中的js、css添加版本号，解决浏览器缓存引起的问题const fs = require("fs"); const { join, resolve } = require('path'); const execSync = require('child_process').execSync; const { mergeUrl } = require('./url.utils'); const findPath = resolve('./dist/template'); const rootPath = resolve('./'); //文件版本记录 const fileVersionNote = {}; const toComPath = path => path.replace(/\\/g, '/'); //获取版本号 const getVersion = (dir, fileName) => { let dirPathPart = toComPath(dir).split('/'); dirPathPart.pop(); let dirPath = dirPathPart.join('/'); fileName = fileName.replace(/^\s*(.*?)\s*$/, '$1'); if (!/^\//.test(fileName)) { fileName = join(dirPath, fileName).replace(rootPath, ''); }else{ fileName = 'dist' + fileName; } return getGitCommitVersion(toComPath(fileName).replace(/^\/(.*?)$/, '$1')); } //获取git文件版本号 const getGitCommitVersion = (file) => { let gv = null; if(/\?/.test(file)){ file = file.replace(/^(.*?)\?.*?$/, '$1'); } let noteV = fileVersionNote[file] if (typeof noteV !== 'string' || noteV === '') { if (fs.existsSync(file)) { try { gv = execSync(`git log ${file} | grep commit | awk 'NR==1' | awk -F ' ' '{print $2}'`); gv = gv.toString(); } catch (error) { } } if (typeof gv !== 'string' || gv.length < 10) { console.log('版本号获取错误', file); noteV = ''; }else{ noteV = gv.substr(0, 7); console.log('新文件git提交号：', file, noteV); } fileVersionNote[file] = noteV; } return noteV; } //读取所有的html function findHtmlAndAddVersion(dir) { if (fs.existsSync(dir)) { fs.stat(dir, (err, stat) => { if (err || !stat) { return console.error('读取文件状态错误', err); } else { if (stat.isFile()) { //只是读取html文件 if (/\.htm(l){0,1}$/i.test(dir)) { fs.readFile(dir, 'utf8', (err, data) => { if (err) { return console.error('读取文件错误', err); } else { let html = data.replace(/<link(.*?)href\s*=\s*([\'\"])(.*?)\2(.*?)>/gi, ($0, $1, $2, $3, $4, $5) => { if (/^\s*http[s]{0,1}:\/\//i.test($3)) { return $0; } else { return `<link${$1}href="${mergeUrl($3, { _gv: getVersion(dir, $3) })}"${$4}>`; } }).replace(/<script(.*?)sr…

docker 使用
type: item
date: 2020-09-13T08:26:00+00:00
description: docker概述按照yum-config-manager工具yum -y install yum-utils安装docker-ce安装docker-ce的yum源sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #关闭使用最新版本docker-ce sudo yum-config-manager --disable docker-ce-nightly安装docker-cesudo yum install docker-ce docker-ce-cli containerd.io启动容器sudo systemctl start docker

pm2使用
type: item
date: 2020-09-13T00:34:00+00:00
description: pm2概述内建负载均衡（使用Node cluster 集群模块）后台运行0秒停机重载(维护升级的时候不需要停机).具有Ubuntu和CentOS 的启动脚本停止不稳定的进程（避免无限循环）控制台检测提供 HTTP API远程控制和实时的接口API ( Nodejs 9.模块,允许和PM2进程管理器交互 )pm2命令npm install pm2 -g # 命令行安装 pm2 pm2 start app.js -i 4 #后台运行pm2，启动4个app.js # 也可以把'max' 参数传递给 start # 正确的进程数目依赖于Cpu的核心数目 pm2 start app.js --name my-api # 命名进程 pm2 list # 显示所有进程状态 pm2 monit # 监视所有进程 pm2 logs # 显示所有进程日志 pm2 stop all # 停止所有进程 pm2 restart all # 重启所有进程 pm2 reload all # 0秒停机重载进程 (用于 NETWORKED 进程) pm2 stop 0 # 停止指定的进程 pm2 restart 0 # 重启指定的进程 pm2 startup # 产生 init 脚本 保持进程活着 pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615) pm2 delete 0 # 杀死指定的进程 pm2 delete all # 杀死全部进程pm2目录卸载rm /usr/local/bin/pm2 rm -r /usr/local/lib/node_modules rm -r /root/.pm2/ `` ### pm2 自启动安装pm2npm install pm2 -g保存当前进程状态pm2 save生成开机自启动服务pm2 startup启用开机自启:systemctl enable pm2-root ### pm2 运行npm命令 ### 简单用法 1. npm run dev 2. pm2 start npm -- run dev 以上使用是等效的 #### 监听并重新命名运行（--watch监听代码变化，--name 重命令任务名称，-- run后面跟脚本名字） pm2 start npm --watch --name nickname -- run dev ### 手动删除pm2日志pm2 flush### 自动删除pm2日志pm2 install pm2-logrotate // 注意是pm2 install而不是npm installpm2 set pm2-logrotate-ext:retain 7 //保存7个文件pm2 set pm2-logrotate-ext:max_size 100M //每个备份文件大小为100M

服务器管理
type: item
date: 2020-09-08T08:26:00+00:00
description: 查看磁盘中文件大小 du -sh *Linux log日志清理检查当前journal使用磁盘量journalctl --disk-usage journalctl --disk-usage清理方法可以采用按照日期清理，或者按照允许保留的容量清理，只保存2天的日志，最大500Mjournalctl --vacuum-time=2d journalctl --vacuum-size=500M如果要手工删除日志文件，则在删除前需要先轮转一次journal日志systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service统计文件夹中文件与目录大小（包含隐藏文件）du -sh .[!.]*查看磁盘使用情况df -h

PHP docker 配置
type: item
date: 2020-09-02T12:55:00+00:00
description: Dockerfile# 从官方基础版本构建 FROM php:7.2-fpm # 1.0.2 增加 bcmath, calendar, exif, gettext, sockets, dba, # mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm 扩展 RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext \ sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm # 1.0.3 增加 bz2 扩展, 读写 bzip2（.bz2）压缩文件 RUN apt-get update && \ apt-get install -y --no-install-recommends libbz2-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) bz2 # 1.0.4 增加 enchant 扩展, 拼写检查库 RUN apt-get update && \ apt-get install -y --no-install-recommends libenchant-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) enchant # 1.0.5 增加 GD 扩展. 图像处理 RUN apt-get update && \ apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ docker-php-ext-install -j$(nproc) gd # 1.0.6 增加 gmp 扩展, GMP RUN apt-get update && \ apt-get install -y --no-install-recommends libgmp-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) gmp # 1.0.7 增加 soap wddx xmlrpc tidy xsl 扩展 RUN apt-get update && \ apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl # 1.0.8 增加 zip 扩展 RUN apt-get update && \ apt-get install -y --no-install-recommends libzip-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) zip # 1.0.9 增加 snmp 扩展 RUN apt-get update && \ apt-get install -y --no-install-recommends libsnmp-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) snmp # 1.0.10 增加 pgsql, pdo_pgsql 扩展 RUN apt-get update && \ apt-get install -y --no-install-recommends libpq-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) pgsql pdo_pgsql # 1.0.11 增加 pspell 扩展 RUN apt-get update && \ apt-get ins…

Java小技巧
type: item
date: 2020-09-01T13:15:00+00:00
description: linux系统中设置环境变量vi /etc/profile 追加如下内容JAVA_HOME= /usr/local/java/jdk1.8.0_261 export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin配置生效： source /etc/profile