uwsgi 处理记录

日志输出到终端#

uwsgi.ini文件中配置

log-master = true
; logto=/var/log/uwsgi.log 同时这行不能有

启动命令: uwsgi /opt/disk2/var/www/scancenter/3rd/conf/uwsgi-docker/uwsgi.ini --log-master

隔一段时间卡死,重启不能#

当作为纯后端API使用时, 使用 http-socket 不使用 http

使用supervisor管理uwsgi#

#daemonize=/var/log/uwsgi8011.log # 守护进程一定要注释掉(关键)

查看性能数据#

  1. 安装 uwsgitop
  2. 查看 uwsgi stats写入位置
  3. 查看
pip install uwsgitop
cat /opt/trunk/textcheck/3rd/uwsgi/config.ini | grep stats
# > stats=/var/run/uwsgi/uwsgi.status
uwsgitop /var/run/uwsgi/uwsgi.status
# > uwsgi-2.0.19.1 - Wed Oct 18 18:13:48 2023 - req: 113 - RPS: 0 - lq: 0 - tx: 75.1K

node: app-58d8477f4-26fzb - cwd: /app - uid: 0 - gid: 0 - masterpid: 8 WID % PID REQ RPS EXC SIG STATUS AVG RSS VSZ TX ReSpwn HC RunT LastSpwn 1 28.3 132942 32 0 0 0 idle 19161ms 0 0 15.2K 1 0 155394.03 17:34:42 2 28.3 132950 32 0 0 0 idle 1781ms 0 0 20.1K 1 0 126123.093 17:34:42 3 22.1 132958 25 0 0 0 idle 5982ms 0 0 16.9K 1 0 127199.778 17:34:42 4 21.2 132963 24 0 0 0 idle 15274ms 0 0 22.8K 1 0 144018.093 17:34:42

Qt/PySide

pyside

绘制界面和使用#

安装Qt本体后可以使用Design绘制图形化界面.而后保存为xxx.ui文件.

转换为py#

  • 注意版本
pyside6-uic xxx.ui -o ui_xxx.py

不过信号槽就不要在Design中去标了, 放在py中手动创建和管理目前看来更为直观方便.

pyside6-designer 不能用的问题#

桌面环境: Ubuntu 24.04 LTS Wayland

pip 安装后运行pyside6-designer 提示, 可以显示欢迎页但是无法进入主页面:

qt.pysideplugin: Environment variable PYSIDE_DESIGNER_PLUGINS is not set, bailing out.
qt.pysideplugin: No instance of QPyDesignerCustomWidgetCollection was found.

安装Qtica后莫名恢复pip install Qtica 本来是本着指定PYSIDE_DESIGNER_PLUGINS, 指定registerwigglywidget.py文件, 然后补充wigglywidget包的目的安装的Qtica但是wigglywidget包依然没有安装上, 但是pyside6-designer它好了,可以进入主界面了….

安装问题

记录一些安装问题#

Debian 使用 apt-add-repository(ppa)#

sudo apt update
sudo apt install software-properties-common

FreeBSD桌面#

  • 换源
  • pkg install xorg xfce
  • echo ‘dbus_enable=“YES”’ » /etc/rc.conf
  • echo “/usr/local/etc/xdg/xfce4/xinitrc” > ~/.xinitrc
  • startx

登录界面#

  • pkg install slim slim-themes
  • echo ‘slim_enable=“YES”’ » /etc/rc.conf

vbox(没测试)#

  • pkg install virtualbox-ose-additions
  • /etc/rc.conf写入
vboxguest_enable="YES"
vboxservice_enable="YES"

仅供参考看这里 因为vbox显卡太弱安装了vmware后就一直没用回过vbox,我还没测试过

vmware#

  • pkg install open-vm-tools xf86-video-vmware xf86-input-vmmouse
  • 继续向/etc/rc.conf中写入
hald_enable="YES"
moused_enable="YES"
# vmware_guest_vmblock_enable="YES"
# vmware_guest_vmhgfs_enable="YES"
# vmware_guest_vmmemctl_enable="YES"
# vmware_guest_vmxnet_enable="YES"
# vmware_guest_enable="YES"

下面注释掉的是因为在测试中如果打开的话会有各种问题….尤其鼠标 其他可见这里参考 仅供参考, 这里面的东西很多都是有问题的.

Clash(樹莓派4 cli版)#

  • 下載對應版本地址
  • 注意不要選擇1.9.0版本,我用的1.8.0,9多人反映(以及我)有問題
  • 我是樹莓派4 用的armv8 樹莓派3 據說用armv7
  • 解壓給運行權限
  • 從無論某處拿到配置文件 大多給訂閱地址, 但這裏使用需要我們手動下載好
  • 配置systemd或其他(手動啓動的話注意需要root,或者給相應用戶配置端口權限)
[Unit]
Description=clash daemon
[Service]
Type=simple
User=root
ExecStart=/home/pi/apps/clash-linux-armv8-v1.8.0/clash-linux-armv8-v1.8.0 -f /home/pi/.config/clash/config.yaml
Restart=on-failure
[Install]
WantedBy=multi-user.target
  • 啓用
sudo systemctl enable clash
sudo systemctl start clash
sudo systemctl status clash

Windows下wsl2 安装 npm && nodejs#

摘抄自微软说明文档

gRpc使用小记

gRpc

gRpc HelloWorld#

helloWorld#

quickstart

protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    helloworld/helloworld.proto

MacOS下问题#

  • 原本protobuf中没有mac的gen-go和gen-go-grpc,所以需要额外运行安装.
  • 除了使用brew用go get应该也是可以的,就是有路径问题,所以还是使用brew吧
brew install protobuf
brew install protoc-gen-go
brew install protoc-gen-go-grpc

解决问题记录笔记

问题们

各种一键问题解决方案#

Windows下Git问题#

  • Linux没啥问题,但在Win下报checkout失败,路径问题
git config core.protectNTFS false

docker - supervisord 禁用日志文件或使用 logfile=/dev/stdout#

from: https://www.coder.work/article/100835 标签 docker supervisord

[supervisord]
nodaemon=true
logfile=/dev/stdout
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

当我这样做时,这个主管会崩溃,因为它无法在/dev/stdout 中寻找

如何禁用 supervisord 在我的 docker 容器中创建任何日志文件?

最佳答案

对于主主管,nodaemon 将导致日志转到 stdout

[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0

然后将每个托管进程的日志发送到标准输出文件描述符/dev/fd/1

[program:x]
command=echo test
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

或者,如果您希望将 stderr 保留在不同的流上:

[program:x]
command=echo test
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
stderr_logfile_maxbytes=0

关于docker - supervisord 禁用日志文件或使用 logfile=/dev/stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45645758/

docker中执行sed报Device or resource busy错误的处理原因及方式 转载#

kuSorZ 博主文章分类:Linux 文章标签: docker | sed 文章分类: Docker 原文出处: https://www.cnblogs.com/xuxinkun/p/7116737.html错误现象

在docker容器中想要修改/etc/resolv.conf中的namesever,使用sed命令进行执行时遇到错误:

/ # sed -i ’s/192.168.1.1/192.168.1.254/g’ /etc/resolv.conf sed: can’t move ‘/etc/resolv.conf73UqmG’ to ‘/etc/resolv.conf’: Device or resource busy

Nginx高可用

Keepalived+Nginx实现高可用#

Keepalived+Nginx实现高可用示意图

Nginx 关键字#

  • IO多路复用epoll(IO复用)
  • 轻量,插件: Nginx仅保留了HTTP
  • CPU亲和: 每个worker进程固定在一个CPU

Nginx配置#

代理#

正向代理示意图 正向代理意义?

反向代理示意图

动静分离#

动态页面和静态页面交给不同的服务器来解析

负载均衡#

upstream balanceServer {
    server 10.1.22.33:12345;
    server 10.1.22.34:12345;
    server 10.1.22.35:12345;
}

server { 
    server_name  fe.server.com;
    listen 80;
    location /api {
        proxy_pass http://balanceServer;
  }
}

机制#

  • 默认: 轮询, 单机卡顿, 影响分配在这台服务器下的用户
  • 默认: 权重轮询, 宕机Nginx会自动剔除出队列, ip_hash-来源IP分配分配给同个服务器
  • fair: 根据相应时间均衡分配, 默认不支持. 需安装upstream_fair, url_haship_hash同样需要安装Nginx的hash软件包.

Keepalived 配置#

粘贴自: 这里

概览#

VIPIP主机名Nginx端口默认主从
192.168.50.130192.168.50.133liuyazhuang13388MASTER
192.168.50.130192.168.50.134liuyazhuang13488BACKUP

主机器配置#

vi /etc/keepalived/keepalived.conf
# 主要
global_defs {
	## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
	router_id liuyazhuang133 ## 标识本节点的字条串,通常为 hostname
} 
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
	interval 2 ## 检测时间间隔
	weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
	state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
	interface eth0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
	virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
	mcast_src_ip 192.168.50.133 ## 本机 IP 地址
	priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
	nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
	advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
	## 设置验证信息,两个节点必须一致
	authentication {
		auth_type PASS
		auth_pass 1111 ## 真实生产,按需求对应该过来
	}
	## 将 track_script 块加入 instance 配置块
	track_script {
		chk_nginx ## 执行 Nginx 监控的服务
	} #
	# 虚拟 IP 池, 两个节点设置必须一样
	virtual_ipaddress {
		192.168.50.130 ## 虚拟 ip,可以定义多个
	}
}

备份机配置#

vi /etc/keepalived/keepalived.conf
# 备份
! Configuration File for keepalived
global_defs {
	router_id liuyazhuang134
}
vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh"
	interval 2
	weight -20
}
vrrp_instance VI_1 {
	state BACKUP
	interface eth1
	virtual_router_id 33
	mcast_src_ip 192.168.50.134
	priority 90
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	track_script {
		chk_nginx
	}
	virtual_ipaddress {
		192.168.50.130
	}
}

Nginx 运维命令#

# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop

# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit

# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload

# 重新打开日志文件
nginx -s reopen

# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename

# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t

#  显示 nginx 的版本
nginx -v

# 显示 nginx 的版本,编译器版本和配置参数
nginx -V

# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua

各个软件换源

mu ou

在国内用原源都会很慢, 所以总结一下各个软件(?吧)换源方法.

Qt#

使用Maintain管理kit时,可以在Settings中设置Repositories,设置地址可从Qt Downloads页面查询.

apt#

可解决版本升级时的问题,即使用了国内源,最后一个文件不知道为什么还是从国外拉取…

# sudo touch /etc/apt/apt.conf
sudo vim /etc/apt/apt.conf

-> Acquire::http::Proxy “http://127.0.0.1:8001”;

FreeBSD#

mkdir -p /usr/local/etc/pkg/repos vim /usr/local/etc/pkg/repos/bjtu.conf

bjtu: {
	url: "pkg+http://mirror.bjtu.edu.cn/reverse/freebsd-pkg/${ABI}/quarterly",
	mirror_type: "srv",
	signature_type: "none",
	fingerprints: "/usr/share/keys/pkg",
	enabled: yes
}
FreeBSD: { enabled: no }

pkg update

Qt#

#

  • 中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
  • 北京理工大学:http://mirror.bit.edu.cn/qtproject/
  • 中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

Python Pip#

pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ dlib(numpy等包名)

#

Nodejs Npm#

不过好像换了会有问题.Npm各个包依赖混乱不堪,不忍直视.

Tips of debuggers

Clang && lldb#

听说clang+lldb >= gcc + gdb, 所以一试:

lldb基本命令#

与GDB相同

  • break (b) - 设置断点,也就是程序暂停的地方
  • run (r) - 启动目标程序,如果遇到断点则暂停
  • step (s) - 进入下一条指令中的函数内部
  • backtrace (bt) - 显示当前的有效函数
  • frame (f) - 默认显示当前栈的内容,可以通过 frame arg 进入特定的 frame(用作输出本地变量)
  • next (n) - 运行当前箭头指向行
  • continue (c) - 继续运行程序直到遇到断点。
clang hello.c -g -o hello
lldb hello
# lldb
b main
run
n
p str

还有颜色 😂 可视效果确实提高了不少 而且这四个工具可以混用,也蛮好.

GDB#

gdb

First and foremost, you will need to compile your program with the flag “-g” (for debug) to run it via GDB. From there the syntax to start debugging is:

tip Of vim

Vim 使用#

vim 除去“简便生活”里的几条配置,在纠结是否添加到别的地方,果然还是单独给vim一个使用手册比较好……

注释#

    # 注释
    112s/^/#/g   
    ---
    # 取消注释
    112s/^#//g     

其实 是vim中的 :s替换命令… 下方解释

或者,使用列编辑的模式:

v、选择区域、ctrl q置行首、I插入#、Esc应用到全列
ctrl v、I、#、Esc
因为有的ctrl q或者ctrl v 不能用……

取消,即使用上述方法选中行首,删除第一个字节即可了

替换#

:s/oldWords/newWords/g

g : 代表当前光标所在行。

由此可知:#

^表行首标识符。 /^/表示行首的空字符。 而取消注释中的/^#/即表示行首的#,被//空字符所替换。

删除:g/出现计算意外/d#

:g/出现计算意外/d

查找高亮#

    set hlsearch
    set nohlsearch  

分屏#

实现#

  • 在外部使用-o or -O参数
  • 内部split or vsplit

操作#

  • 移动光标 Ctrl + w hjkl
  • 移动分区Ctrl + w HJKL
  • 统一高度Ctrl + w =
  • 改变高度Ctrl + w +-

more and less#

阅读器~~~ 因为经常读大文件发现了这两个的无敌好处——快。