首页
关于
Search
1
意外通知
29 阅读
2
欢迎来到我的个人博客
14 阅读
3
Mysql 二进制安装脚本
14 阅读
4
脚本练习合集
10 阅读
5
CI/CD理念与流程
9 阅读
默认分类
登录
Search
无冕の神
累计撰写
19
篇文章
累计收到
4
条评论
首页
栏目
默认分类
页面
关于
搜索到
19
篇与
的结果
2026-03-31
OpenClaw临时会话修复
这是在OpenClaw在3月25号更新后出现的问题,我是在Rocky Linux 9 上部署的OpenClaw,成功部署并接入QQBOt为Channel后,使用一段时间发现了问题:(因为使用的是虚拟机,性能有限)在执行一个相对比较复杂的问题时(比如让OpenClaw 部署k8s)OpenClaw在执行一段时间后会无反应(具体表现:操作面板上一直在加载,后台查看进程网关都显示正常,但一直不出结果,进程cpu使用率突然降的很低,尝试继续对话会发现需要排队)问题解决过程:1.当时第一反应是网关进程挂了,但是一看进程还在运行,但是不占用资源,判断为僵尸进程,但是通过命令ps aux | grep -E 'openclaw|docker' | awk '{print $2, $8, $11}'查看进程状态是正常的s,并不是z(僵尸进程)。试着手动给QQBOt发送信息,进程是在运行的,并且消息送达,重启网关进程问题依然没有解决,排除进程问题。2.开始查看OpenClaw各种日志,状态日志显示网关运行正常QQBOtChannel运行正常,查看会话日志发现我的会话是被接收了的,但是一直没有回应,我试着手动连接模型,得到了模型的回复消息,证明模型是没问题的,问题出在OpenClaw的agent没有把消息转发给模型,但是进程没问题,模型没问题问题出在本地,我把判断结果给ai,得出是会话状态损坏,特定会话的内部状态可能损坏,导致新消息被接收但无法进入处理流程。3.解决方案:尝试了重启进程,创建新会话,清除缓存无果后,删除了OpenClaw的所有会话记录rm ~/.openclaw/agents/main/sessions/sessions.json重启进程后OpenClaw暂时正常,能进行对话了,但是之前的记录都没了。后续:之后想着能不能在出问题前拍快照,出问题后返回快照(笨办法)。但实际尝试后发现不可取,离谱的是恢复快照后问题没解决,而且清除会话记录后依然不行,尝试回到初始快照,保持环境干净,重新部署后问题依然没解决,请教了很多人,猜测可能是虚拟机内核问题,最后只能删除虚拟机,重装系统才能恢复正常,因此这个方法只适用于临时会话修复,建议及时备份会话记录。后记:在3.28号官方更新了会话转录修复 - 修复损坏的工具调用块导致的持久化损坏问题,目前使用后暂时没出现问题
2026年03月31日
1 阅读
0 评论
0 点赞
2026-02-08
脚本练习合集
开机显示系统信息脚本#!/bin/bash yum install -y net-tools &> /dev/null wangka=`ip a | grep ens | head -1 | cut -d: -f2` System=$(hostnamectl | grep System | awk '{print $3,$4,$5}') Kernel=$(hostnamectl | grep Kernel | awk -F: '{print $2}') Virtualization=$(hostnamectl | grep Virtualization| awk '{print $2}') Statichostname=$(hostnamectl | grep Static|awk -F: '{print $2}') Ens32=$(ifconfig $wangka | awk 'NR==2 {print $2}') Lo=$(ifconfig lo | awk 'NR==2 {print $2}') NetworkIp=$(curl -s icanhazip.com) echo "当前系统版本是:$System" echo "当前系统内核是:$Kernel" echo "当前虚拟平台是:$Virtualization" echo "当前主机名是:$Statichostname" echo "当前网卡$wangka的地址是:$Ens32" echo "当前lo接口的地址是:$Lo" echo "当前公网地址是:$NetworkIp"监控httpd进程 1.每隔10s监控httpd的进程数,若进程数大于等于50,则自动重启Apache服务,并检测服务是否重启成功2.若未成功则需要再次启动,若重启5次依旧没有成功,则向管理员发送告警邮件(使用echo输出已发送即可),并退出检测3.如果启动成功,则等待1分钟后再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件,并退出检测#!/bin/bash function check_httpd_process_number(){ process_num=$(ps -aux | grep httpd | wc -l) if [[ $process_num -gt 50 ]] then systemctl restart httpd &> /dev/null systemctl status httpd &> /dev/null if [[ $? -ne 0 ]] then num_restart_httpd=0 while true;do let num_restart_httpd++ systemctl restart httpd &> /dev/null systemctl status httpd &> /dev/null [[ $? -eq 0 ]] && break [[ $num_restart_httpd -eq 6 ]] && break done fi systemctl status httpd &> /dev/null [[ $? -ne 0 ]] && echo "apache未正常重启,已发送邮件给管理员" && return 1 sleep 60 process_num=$(ps -ef | grep httpd| wc -l) if [[ $process_num -gt 50 ]] then echo "apache经过重启进程数依然大于50" return 1 else return 0 fi else echo "进程数小于50" sleep 3 return 0 fi } while true;do check_httpd_process_number [[ $? -eq 1 ]] && exit done 统计文件 统计两个目录下的相同文件,以及不同文件#!/bin/bash # server1的文件在/test/目录中,server2的文件在/root/demo中,通过md5值来判断文件一致性,最终输出相同文件以及各自的不同文件 #定义两个数组的索引 point1=0 point2=0 echo "/test/的文件:" # 将server1上的文件的散列值记录到数组当中 for i in `ls /root/demo`;do md5=`md5sum /root/demo/$i | awk '{print $1}'` arrar1[$point1]=$md5:$i echo ${arrar1[$point1]} let point1++ done echo "/root/demo的文件:" # 将server2上的文件的散列值记录到数组当中 for i in `ls /test`;do md5=`md5sum /test/$i | awk '{print $1}'` arrar2[$point2]=$md5:$i echo ${arrar2[$point2]} let point2++ done # 找出相同文件以及server1上的独立文件,server1的每个文件都和server2上进行比较 echo "-------------------------------" for i in ${arrar1[@]};do for j in ${arrar2[@]};do temp_flag=0 #定义一个标志位,表示没找到相同的文件 server1_md5=`echo $i | awk -F: '{print $1}'` server2_md5=`echo $j | awk -F: '{print $1}'` server1_filename=`echo $i | awk -F: '{print $2}'` server2_filename=`echo $j | awk -F: '{print $2}'` if [ $server1_md5 == $server2_md5 ];then echo -e "两边共同文件\t\t\t$server1_filename" temp_flag=1 #找到了相同的文件 break fi done if [ $temp_flag -eq 0 ];then echo -e "server1不同文件\t\t\t$i" fi done # 找出server2上的独立文件 for i in ${arrar2[@]};do for j in ${arrar1[@]};do temp_flag=0 server1_md5=`echo $i | awk -F: '{print $1}'` server2_md5=`echo $j | awk -F: '{print $1}'` server1_filename=`echo $i | awk -F: '{print $2}'` server2_filename=`echo $j | awk -F: '{print $2}'` if [ $server1_md5 == $server2_md5 ];then temp_flag=1 break fi done if [ $temp_flag -eq 0 ];then echo -e "server2不同文件\t\t\t$i" fi done
2026年02月08日
10 阅读
0 评论
1 点赞
2026-02-04
kubernetes网络模型
kubernetes集群应该包含至少三个网络。一个是各主机自身所属的网络,其地址配置于主机的网络接口,用于各主机之间的通信,例如master与各node之间的通信。此地址配置于kubernetes集群构建之前,它并不能由kubernetes管理,管理员需要于集群构建之前自行确定其地址配置及管理方式。第二个是kubernetes集群上专用于pod资源对象的网络,它是一个虚拟网络,用于为各pod对象设定ip地址等网络参数,其地址配置于pod中容器的网络接口之上。pod网络需要借助kubenet插件或CNI插件实现,该插件可独立部署于kubernetes集群之外,亦可托管于kubernetes之上,它需要在构建kubernetes集群时由管理员进行定义,而后在创建Pod对象时由其自动完成各网络参数的动态配置。第三个是专用于service资源对象的网络,它也是一个虚拟网络,用于为kubernetes集群之中的service配置ip地址,但此地址不配置于任何主机或容器的网络接口上,而是通过Node之上的kube-proxy配置为iptables或ipvs规则,从而将发往此地址的所有流量调度至其后端的各pod对象之上。service网络在kubernetes集群创建时予以指定,而service的地址则在用户创建service时予以动态配置在 K8S 底层网络中,IPVS 的效率通常比 iptables 更高(面试考察)。底层机制与性能天花板:IPVS:是内核级四层负载均衡器,基于哈希表实现快速查找和转发,其查找复杂度接近 O (1),性能几乎不受规则 数量影响,能够支持 10 万 + 的并发连接。 iptables:是基于防火墙规则链的实现,规则匹配采用顺序匹配模式,即逐条遍历规则,时间复杂度为 O (n)。 当集群中服务和 Pod 数量增多时,规则数量会线性增长,性能会显著下降,一般在 5000 + 连接时性能就会骤降。规则更新方式:IPVS:采用增量更新方式,仅修改变化的条目,规则更新耗时极短,可达毫秒级生效,能够快速应对集群中服务和 Pod 的变化,不会引起流量抖动。 iptables:在规则更新时需要全量重建,即重新写入数百条甚至更多规则,这一过程可能需要秒级延迟,还可能导致 服务抖动甚至中断。负载均衡算法:IPVS:支持多种负载均衡算法,如轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最小连接(wlc)、 源地址哈希(sh)、目标地址哈希(dh)等,能够根据不同的业务场景选择合适的算法,实现更灵活的流量分发。 iptables:仅支持随机和轮询两种简单的负载均衡策略,无法根据后端 Pod 的负载情况动态调整流量, 在一些对负载均衡策略要求较高的场景下,无法满足需求。内存占用:IPVS:内存占用相对固定,约为 30MB。 iptables:每增加一个服务,内存占用会相应增加约 0.5MB,在大规模集群中,随着服务数量的增多, 内存占用会逐渐增大。
2026年02月04日
7 阅读
0 评论
0 点赞
2026-02-04
kubernetes核心组件及作用
控制平面 kube-apiserver etcd kube-scheduler kube-controller-manager工作平面 kubelet CNI CSI CRI kube-proxy 容器运行时k8s为什么选用etcd作为数据库组件(为什么不用别的非关系型键值对数据库),它有什么特点?Kubernetes (K8s) 选择 etcd 作为其核心数据库组件,主要源于 etcd 的设计理念和核心特性与 K8s 对数据存储的严格要求高度契合。K8s 需要一个能够保证强一致性、高可用性,并支持实时变更监听的分布式键值存储,而 etcd 正是为这类场景而生的。etcd 的核心特点:强一致性:etcd 使用 Raft 一致性算法来管理集群。高可用性:etcd 被设计为以集群模式运行,通常由奇数个节点组成(如 3 或 5 个)。Watch(监听)机制:这是 etcd 最关键的机制之一。客户端可以订阅(Watch)特定的键或键前缀,当这些键的值发生变化时,etcd 会主动通知所有订阅的客户端。简单易用的 API:etcd 提供了基于 HTTP/JSON 和 gRPC 的简单 API,使得与各种语言和框架的集成变得非常容易。多版本并发控制 (MVCC):etcd 会为每个键保留多个历史版本,并维护一个全局单调递增的版本号(revision)。租约(Lease)机制:租约是一种带过期时间的契约。当租约过期时,所有与之关联的键都会被自动删除。etcd 凭借其强一致性、高可用性、强大的监听机制和简洁的 API,为 Kubernetes 提供了一个可靠、高效且易于集成的数据存储后端,是 K8s 控制平面能够稳定运行的关键基石。
2026年02月04日
5 阅读
0 评论
0 点赞
2026-02-04
Docker网络管理与资源隔离
Docker网络管理none网络类型在使用none模式后,docker容器不会进行任何网络配置,其没有网卡、没有ip也没有路由,因此默认无法与外界进行通,需要手动添加网卡配置ip等,所以极少使用[root@server1 ~]# docker run -d -it --name test-none --network none busybox[root@server1 ~]# docker exec -it test-none ifconfigcontainer网络类型这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡(环回接口)设备通信。[root@server1 ~]# docker run -d -it --name test-container --network container:container1 busybox[root@server1 ~]# docker exec -it test-container ifconfighost网络类型如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。[root@server1 ~]# docker run -d -it --name test-host --network host busybox[root@server1 ~]# docker exec -it test-host ifconfigbridge网络类型(默认)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中 ,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。bridge模式是docker的默认网络模式,不写--network参数,就是bridge模式。**使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。[root@server1 ~]# docker network create -d bridge --subnet 10.10.0.0/16 --gateway 10.10.0.1 eagleslab-net[root@server1 ~]# docker network list[root@server1 ~]# docker run -d -it --name test-bridge --network eagleslab-net busybox[root@server1 ~]# docker exec -it test-bridge ifconfigDocker资源隔离MNT Namespace:隔离磁盘和文件系统[root@server1 ~]# docker run -it --rm --privileged ubuntu bashIPC Namespace:隔离进程间的通信UTS Namespace:隔离主机名和域名PID Namespace:隔离进程PID[root@server1 ~]# docker inspect -f '{{.State.Pid}}' <container_id>Net Namespace:隔离网络User Namespace:隔离用户名和用户组
2026年02月04日
4 阅读
0 评论
0 点赞
1
2
...
4