常用操作合集七

我正在参加「金石计划」

写在前面

在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。

可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。

所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。

<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来

下面,就分享一下,我遇到的一些问题,和相关的解决方法。

可能以前也有分享过一篇,有兴趣的小伙伴,可以查看这里:常用操作合集一常用操作合集二常用操作合集三常用操作合集四常用操作合集五常用操作合集六

1.根据进程 PID 找到进程启动目录、二进制、日志位置等信息

bash 复制代码
#查找进程pid
ps -aux|grep jenkins
​
#进入到进程目录
cd /proc/2401 #(带上进程pid)

更多详情,可以参考这里:/proc/pid目录详解

2.定时写一个shell脚本,按日期切割nohup.out日志内容

bash 复制代码
#!/bin/bash
​
cd /opt/jxbp
​
# 设置切割文件的前缀和存放目录
NAME=$(basename $(basename "*.out")  .out)
PREFIX="/opt/jxbp/*.out"
DATE=$(date +%Y%m%d)
OUTPUT_DIR="/opt/jxbp/log"
LOGFILE="${OUTPUT_DIR}/${NAME}-${DATE}.log"
​
# 检查目录是否存在,不存在则创建
mkdir -p "$OUTPUT_DIR"
​
# 将nohup.out的当前内容追加到新的日志文件中
tail -n +1 *.out >> "$LOGFILE"
​
# 清空.out文件
> ${NAME}.out
​
# (可选)如果你希望保留一定天数的日志,可以添加删除旧日志的逻辑
# 例如,保留最近7天的日志
find "$OUTPUT_DIR" -name "${NAME}-*.log" -type f -mtime +7 -delete

添加该shell脚本,到定时器任务中:

sh 复制代码
echo "*/1 * * * * /opt/llxydn/logback.sh" | crontab -

3.vue-devtools下载

blog.csdn.net/weixin_5991...

4.mysql排序字段重复,导致分页出现重复数据问题

如果多行在 order by 列中具有相同的值,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回这些行。换句话说,这些行的排序顺序相对于无序列来说是不确定的。

例如:

sql 复制代码
--对age进行排序
select * from user order by age limit 0,10
​
--当age出现重复数据的时候,分页后,可能第1页出现的数据,会在第二页重复出现
select * from user order by age limit 10,10

解决方法:

  • 方法一:给排序字段添加索引
csharp 复制代码
create index user_age_idx on user(age);
  • 方法二:在order by子句中加入具有唯一性的列
sql 复制代码
-- asc升序
select * from user order by age,id asc limit 0,10
​
-- desc降序
select * from user order by age desc ,id limit 0,10

id是自增字段

5.达梦数据库修改字段类型

sql 复制代码
-- 增加一个新字段
alter table FORM_CUSTOM_QUERY add SQL_1 clob;

-- 将旧字段的数据先更新到新字段中(注:如果你表中没数据,这步可以不用做)
update FORM_CUSTOM_QUERY set SQL_1 = SQL_;

-- 删除旧字段
alter table FORM_CUSTOM_QUERY drop column SQL_;

-- 将新字段改名为旧字段
alter table FORM_CUSTOM_QUERY rename column SQL_1 to SQL_;

6.统计公司网站(nginx)用户城市分布

使用到Maxmind的客户端库, libmaxminddb的github地址, 可以下载源码进行编译安装,用于读取Maxmind数据库文件,将ip解析出对应的地理位置,通过地理位置就可拿到城市等信息。

需要到Maxmind官网下载地理位置数据库文件,GeoLite2-City.mmdb

对nginx的日志文件access.log进行解析。

创建shell脚本文件: nginx_log_geoip.sh

sh 复制代码
#!/bin/bash

log_file="./access.log"
geoip_file="./GeoLite2-City.mmdb"
result_file="./result.log"

while read LINE; do
    ip=$(echo $LINE | awk '{print $1}')
    mmdblookup --file $geoip_file --ip "$ip" city names zh-cN 2>/dev/null
    | awk -F'"' '{print $2}' >> $result_file
done < $log file

grep -Ev "^$" $result_file | sort | uniq -c | sort -k1 -nr

该shell脚本解析如下:

log_file为 nginx日志文件路径

geoip_file为 Maxmind的地理位置对应城市的数据库文件

result_file为 输出结果文件

while,循环遍历nginx日志文件每一行,进客户端ip提取出来,使用mmdblookup获得ip对应的城市,输出到结果文件

grep,使用grep过滤出非空行的城市,通过sort进行排序,通过uniq -c去重统计次数,再用sort k1对于次数做一个排序

nginx对应访问日志格式如下:

7.基于nginx实现灰度上线系统

1.基于权重的流量切分

nginx将用户流量按比例转发到新版本,一旦新版本验证通过,再将流量切换到新版本。

使用upstream配置权重即可。

nginx 复制代码
upstream webservers{
    server 192.168.0.1 weight=9;
    server 192.168.0.2 weight=1;
}

2.基于客户端请求的流量切分

nginx通过获取客户端携带的cookie或者http请求头或者指定的键值对,来去将流量转发到新版本,一旦新版本验证通过,再将流量切换到新版本。

nginx 复制代码
set $backend "webservers"

#当客户端携带的cookie,包含canary=yes键值对,将backend设置为灰度版本
if($http_cookie ~* "canary=yes"){
    set $backend "webservers-canary"
}

location / {
    proxy_pass http://$backend; #这里使用动态值
}

好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

相关推荐
小李不想输啦1 小时前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
张铁铁是个小胖子1 小时前
微服务学习
java·学习·微服务
ggs_and_ddu1 小时前
Android--java实现手机亮度控制
android·java·智能手机
梁萌2 小时前
Linux安装Docker
linux·运维·docker·helloworld·容器化部署
敲代码娶不了六花2 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
彩虹糖_haha2 小时前
Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)
linux·运维·服务器
旺仔学IT2 小时前
Centos7中使用yum命令时候报错 “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·运维·centos
Yhame.2 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
qq_433618443 小时前
shell 编程(五)
linux·运维·服务器
是小崔啊4 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel