常用操作合集七

我正在参加「金石计划」

写在前面

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

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

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

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

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

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

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; #这里使用动态值
}

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

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

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

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

相关推荐
zhanghe68716 分钟前
es的密码带有特殊字符,导出
java
pnoker28 分钟前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy29 分钟前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
tangwangbi1 小时前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
天远数科1 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
步行cgn1 小时前
YAML 的语法规则
spring boot·后端
蜀道山老天师1 小时前
Shell Bash变量与运算符(含条件测试与流程控制)
linux·运维·bash
Mr.朱鹏1 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
骇客野人1 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng12 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库