每日复盘

Q9Mongodb保存|插入字段失败

  • 1.查看Table定义==>fiedls = fiedls.IntFields() ==>需要加()

Q8虚拟环境配置

  • 拉取项目后如何配置虚拟环境?
  • 如何激活虚拟环境, 并每次进入pycharm的terminal都保证是venv?
  1. venv的目录和interpreter的目录要配置相同

![image-20211018164551110](/Users/edy/Library/Application Support/typora-user-images/image-20211018164551110.png)

![image-20211018164714977](/Users/edy/Library/Application Support/typora-user-images/image-20211018164714977.png)

  1. terminal的配置如下

![image-20211018164922890](/Users/edy/Library/Application Support/typora-user-images/image-20211018164922890.png)

Q7Nginx Timeout 504

-Info

在前端导出excel时, 导出失败并返回GateWay TimeOut 504

-Analysis

  • 重新导出查看log
1
2
url: /channel/get_excel?token=ab5c40fa9da40d74f5a2ba17d84dcf63
GET /channel/get_excel?token=ab5c40fa9da40d74f5a2ba17d84dcf63 (183.81.181.194) 67000.83ms
  • 说明导出正常, 其中导出时间大于60s
  • nginx做反向代理,默认请求是有一个60秒的超时,如果http请求超过了60秒,再返回,连接就会被nginx中断,前端就会得到504的错误:gateway time-out。

-Solution

修改nginx的配置, 将超时设置延长至300s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker ps 

docker exec -it nginx_container_id bash

whereis nginx.conf

cd /etc/config

vim nginx.conf

{
...
keepalive_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300
...
}

-Review

  • 如果程序正常, log也没有报错, 很可能是配置的原因

Q6mongodb插入数据报错

-Info

在mongodb中插入数据报错{'code': -1, 'msg': 'exception'}

-Analysis

经过排查不是以下原因:

  • 插入字段类型与定义不符
  • 缺少必要字段

-Solution

在mongodb表中定义字段如下:

1
2
3
4
5
6
7
# 群发任务
class AssistantBatchSend(BaseModel):
__table__ = 'assistant_batch_send'
client_id = fields.IntField() # 创建人
task_id = fields.IntField() # 任务标识
message_list = fields.JsonField() # 发送内容
bot_username_list = fields.JsonField() # 机器人id

在插入的数据中

1
2
3
task_identification = int(str(self.user_info.client_id) + str(int(time.time()*1000000))) # 任务标识
immediate_info = CM(Table.AssistantBatchSend)
immediate_info.task_id = task_identification

其中task_id定义为intfiled长度最大

为:

![image-20211011134300296](/Users/edy/Library/Application Support/typora-user-images/image-20211011134300296.png)

但是传入的长度为22, 应该把此字段定义为StringField

Q5SSH连接VCM断开

-Question

报错信息

info1

client_loop: send disconnect: Broken pipe

info2

yum-config-manager client_loop: send disconnect: Broken pipe

-Analysis

info1

终端连接服务器无响应且没用自动间隔连接配置VCM的问题

-Solution

info1

修改/etc/ssh/sshd_config文件, 修改ClientAliveInterval 120

1
2
3
4
5
6
# 通过每 300 秒(每 5 分钟)进行响应确认来保持连接。 我认为这个部分的数字可以是60或120。
>/etc/ssh/sshd_config
#PermitUserEnvironment no
#Compression delayed
ClientAliveInterval 60
#ClientAliveCountMax 3

重新启动ssh服务

1
systemctl restart sshd

或者在客户端进行更改/etc/ssh/ssh_config

1
2
3
# 添加参数
TCPKeepAlive yes
ServerAliveInterval 60

info2

配置/etc/ssh/ssh_config文件,增加以下内容即可:

1
2
3
4
5
6
7
Host *
IPQoS=throughput
# 断开时重试连接的次数
ServerAliveCountMax 5

# 每隔5秒自动发送一个空的请求以保持连接
ServerAliveInterval 5

重新启动ssh服务

1
systemctl restart sshd

-Review

1.在服务端进行修改

在服务器端, 可以让服务器发送“心跳”信号测试提醒客户端进行保持连接

通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容

打开服务器 /etc/ssh/sshd_config,我在最后增加一行

1
2
ClientAliveInterval 60
ClientAliveCountMax 1

这样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应,(注意:是服务器发心跳信号,不是客户端,这个有别于一些 FTP Client 发送的 KeepAlives 信号),如果客户端没有回应,会记录下来直到记录数超过 ClientAliveCountMax 的值时,才会断开连接。

2.在客户端进行修改

只要在/etc/ssh/ssh_config文件里加两个参数

1
2
TCPKeepAlive yes
ServerAliveInterval 60

前一个参数是说要保持连接,后一个参数表示每过1分钟发一个数据包到服务器表示“我还活着”

如果你没有root权限,修改或者创建~/.ssh/ssh_config也是可以的

Q4vim安装失败

-Question

  1. 在使用vim时发现报错bash: vim: command not found

-Analysis

使用cat /proc/version查看系统版本

![image-20210928202753365](/Users/edy/Library/Application Support/typora-user-images/image-20210928202753365.png)

查看系统镜像中是否有vim, 发现red hat 5才有vim

-Solution

  • 使用apt install vim 安装vim
  • 发现Unable to locate package vim

![image-20210928203059115](/Users/edy/Library/Application Support/typora-user-images/image-20210928203059115.png)

  • 需要输入:apt-get update(作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包)
  • 之后再输入apt-get install vim安装(非root用户登录,root apt-get intall vim

-Review

docker常用命令

1
2
3
4
5
6
7
8
9
10
11
# 修改了image内的文件后重启image
docker restart image_id

# 启动container中的所有image
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

# 停止container中的所有image
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

# 删除container中的所有image
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

Q3镜像部署失败

-Question

  1. 部署对应的tag的时候出现error

![image-20210928155639667](/Users/edy/Library/Application Support/typora-user-images/image-20210928155639667.png)

  1. 有正在运行的container, 无法部署

-Analysis

  • 在部署的过程中存在正在运行的container
  • 需要将所有的正在运行的container停下来或者删除所有正在运行的container中的image

-Solution

1
2
3
4
5
6
7
8
9
10
11
# 启动所有image
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

# 停止运行所有image
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

# 删除container中的所有image
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

# 重新部署
sh deploy-debug.sh 1.0.0.65

-Review

  • 使用docker ps -acontainer中的所有image包括正在运行和未运行的
  • docker rmi -f 'docker iamges' 删除的已经存在但未运行的image
  • docker rm image_id删除正在运行的image

Q2镜像重启

-Question

  1. Docker ps 查看镜像状态显示restart

![image-20210928095953991](/Users/edy/Library/Application Support/typora-user-images/image-20210928095953991.png)

  1. RabbitMQ只有生产者没有消费者

-Analysis

  1. 部分服务器没起来

-Solution

  1. docker logs -f image_name 查看对应的image日志
  2. 找到报错信息

![image-20210928095931103](/Users/edy/Library/Application Support/typora-user-images/image-20210928095931103.png)

cerely can't find module name 'component.task.member_change_task.component'

cerely配置错误

-Review

  • docker logs -f
  • command r 搜索已经使用的order

Q1磁盘溢出

-Question

  1. mongodb连接失败报错
    • failed to read 4 bytes from socket within 300000 milliseconds
  2. 紫豆超管后台登陆失败
    • login 无响应
  3. 机器人正常但不可用
    • 机器人上报heartbeat给服务器但服务器不callback

-Analysis

  1. 登陆紫豆服务器ssh root@ip
    • 报错显示disk overflower
  2. df -h查看disk存储情况

image-20210926170428181

-Solution

  1. 删除不用的container|容器修剪

    • PRO环境具有一定的风险
    • docker system prune docker container prune
    1
    2
    3
    4
    5
    6
    7
    8
    docker container prune
    WARNING! This will remove all stopped containers.
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    4a7f7eebae0f63178aff7eb0aa39cd3f0627a203ab2df258c1a00b456cf20063
    f98f9c2aa1eaf727e4ec9c0283bc7d4aa4762fbdba7f26191f26c97f64090360

    Total reclaimed space: 212 B
  2. 删除镜像[优先选择]

    • docker rmi -f `docker images`
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      - docker image需`

      - **删除已经存在的镜像「不包括正在运行的」**

      ### -Review

      **docker rmi :** 删除本地一个或多个镜像。

      ```docker
      docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

  • **-f :**强制删除;
  • **–no-prune :**不移除该镜像的过程镜像,默认移除;

docker prune 命令

prune 命令用来删除不再使用的 docker 对象。

删除所有未被 tag 标记和未被容器使用的镜像:

1
2
3
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

删除所有未被容器使用的镜像:

1
$ docker image prune -a

删除所有停止运行的容器:

1
$ docker container prune

删除所有未被挂载的卷:

1
$ docker volume prune

删除所有网络:

1
$ docker network prune

删除 docker 所有资源:

1
$ docker system prune

docker system prune 命令:

1
2
3
4
5
This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

删除停止的容器、删除所有未被容器使用的网络、删除所有none的镜像。