Ubuntu开发工作
ubuntu服务器开发配置
如果你不想每次登录服务器时输入密码,可以使用 SSH 密钥对进行无密码登录。以下是设置步骤:
新建用户组
在 Ubuntu 上使用其他用户账户创建一个新用户并赋予 sudo 权限,可以按照以下步骤操作:
步骤 1:登录到现有账户
首先,使用现有的具有 sudo 权限的账户登录到 Ubuntu 服务器。
步骤 2:创建新用户
使用 adduser 命令创建一个新用户。例如,创建一个名为 newuser 的用户:
1 | sudo adduser newuser |
系统会提示你输入新用户的密码和其他信息(如全名、房间号等)。你可以根据需要填写,或者按 Enter 跳过这些信息。
步骤 3:将新用户添加到 sudo 组
使用 usermod 命令将新用户添加到 sudo 组,以便赋予 sudo 权限:
1 | sudo usermod -aG sudo newuser |
步骤 4:验证新用户的 sudo 权限
切换到新用户并验证是否具有 sudo 权限:
1 | su - newuser |
然后尝试运行一个需要 sudo 权限的命令,例如更新包列表:
1 | sudo apt update |
系统会提示你输入新用户的密码。输入密码后,如果命令成功执行,则表示新用户已经具有 sudo 权限。
完整示例
以下是从头到尾的完整示例:
1 | # 登录到现有具有 sudo 权限的账户 |
通过以上步骤,你可以在 Ubuntu 上使用现有账户创建一个新的用户,并赋予该用户 sudo 权限。确保你正确输入了新用户的密码,并且在执行 sudo 命令时使用新用户的密码进行验证。
免密码登录
步骤 1:生成 SSH 密钥对
在你的本地计算机上生成一个 SSH 密钥对。如果你已经有一个密钥对,可以跳过这一步。
1 | ssh-keygen -t rsa -b 4096 -C "your_email@example.com" |
按照提示操作,这将生成一对公钥和私钥,默认保存在 ~/.ssh/ 目录下。生成密钥时可以按 Enter 键使用默认文件路径,并且可以选择不设置密钥密码。
步骤 2:将公钥复制到服务器
使用 ssh-copy-id 命令将公钥复制到服务器上的新用户账户。如果新用户账户名为 newuser,服务器地址为 your_server_ip:
1 | ssh-copy-id newuser@your_server_ip |
这将提示你输入新用户的密码,并自动将公钥添加到服务器上的 ~/.ssh/authorized_keys 文件中。
步骤 3:验证无密码登录
现在你可以尝试无密码登录到服务器:
1 | ssh newuser@your_server_ip |
如果一切设置正确,你应该能够直接登录到服务器,而无需输入密码。
手动复制公钥(如果 ssh-copy-id 不可用)
如果没有 ssh-copy-id 命令,可以手动复制公钥到服务器。
在本地计算机上显示公钥内容:
1
cat ~/.ssh/id_rsa.pub
登录到服务器并创建
.ssh目录(如果尚未创建):1
2
3ssh newuser@your_server_ip
mkdir -p ~/.ssh
chmod 700 ~/.ssh编辑或创建
authorized_keys文件:1
nano ~/.ssh/authorized_keys
将本地计算机上显示的公钥内容复制到
authorized_keys文件中,保存并关闭文件:将
id_rsa.pub的内容粘贴到authorized_keys文件中。设置合适的权限:
1
chmod 600 ~/.ssh/authorized_keys
完整步骤示例
在本地计算机上生成 SSH 密钥对:
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将公钥复制到服务器:
1
ssh-copy-id newuser@your_server_ip
验证无密码登录:
1
ssh newuser@your_server_ip
通过这些步骤,你可以设置无密码登录到服务器,简化登录过程并提高安全性。确保妥善保管你的私钥,不要将其泄露给他人。
ubuntu服务器克隆github故障
小记——Linux下使用git clone总是失败 - 幻梦翱翔 - 博客园 (cnblogs.com)
1 | git config --global url."https://".insteadOf git:// |
WSL和深度学习环境配置
报错:

可以参考激活Anaconda
在执行上述命令后,出现 conda: command not found 错误通常是因为 Miniconda 的路径没有正确添加到你的系统环境变量中。以下是一些可能的解决方法:
手动添加环境变量:
打开你的.bashrc文件,并确保以下内容添加到文件末尾:1
export PATH="$HOME/miniconda3/bin:$PATH"
然后保存文件并执行以下命令使其生效:
1
source ~/.bashrc
检查是否初始化了 bash:
在执行~/miniconda3/bin/conda init bash后,确保你已经重新启动了终端窗口或者执行了source ~/.bashrc或source ~/.bash_profile,以确保初始化的更改生效。检查 Miniconda 安装路径:
确保你的 Miniconda 确实安装在~/miniconda3目录下,这是你的wget命令下载并安装的路径。重新安装 Miniconda:
如果以上步骤都没有解决问题,可以尝试重新安装 Miniconda,并确保在安装后按照上述步骤添加了环境变量。
请尝试这些步骤中的一种,并确保在每次更改后重新打开一个新的终端窗口以使更改生效。

超时报错:
在pip命令后加-i https://pypi.tuna.tsinghua.edu.cn/simple
报错:
在Ubuntu上安装Anaconda,可以按照以下步骤操作:
1. 下载Anaconda安装包
首先,前往Anaconda官网(Anaconda Downloads)下载适合Linux系统的Anaconda安装脚本。或者,您可以使用 wget 命令直接下载:
1 | # 下载Anaconda最新版本的安装脚本 |
2. 验证下载的安装包
为了确保下载文件的完整性,可以验证文件的SHA-256校验和。首先,从Anaconda官网获取校验和,然后运行以下命令:
1 | sha256sum Miniconda3-latest-Linux-x86_64.sh |
3. 运行安装脚本
下载完成后,运行安装脚本:
1 | bash Miniconda3-latest-Linux-x86_64.sh |
4. 按照安装向导完成安装
运行安装脚本后,您会看到Anaconda安装向导。按照提示完成安装:
- 阅读并接受许可协议。
- 选择安装位置(默认为
~/anaconda3)。 - 选择是否初始化Anaconda并修改您的
~/.bashrc文件。
5. 激活Anaconda
如果在安装过程中选择初始化Anaconda,则安装程序会自动修改您的 ~/.bashrc 文件,添加Anaconda的路径。如果没有选择初始化,您可以手动添加以下内容到 ~/.bashrc 文件:
1 | # 在 .bashrc 文件末尾添加以下行 |
然后,运行以下命令以使更改生效:
1 | source ~/.bashrc |
6. 验证安装
安装完成后,您可以运行以下命令来验证Anaconda是否安装成功:
1 | conda --version |
这将显示安装的Conda版本。
7. 更新Conda
最后,建议您更新Conda到最新版本:
1 | conda update conda |
通过以上步骤,您应该能够在Ubuntu上成功安装Anaconda。如果您有任何问题,请随时告诉我。
Windows Subsystem for Linux (WSL) 最新详细安装教程-CSDN博客
WSL1 和 WSL2 从C盘 导入到 D盘_wsl迁移到d盘-CSDN博客
WSL重置,打开就报错LocalState\ext4.vhdx‘找不到_wsl子系统ext4.vhdx打开报错:磁盘映像未初始化,包含无法识别的分区,或包含尚未分-CSDN博客
windows连接WSL-ubuntu里安装的MySQL,附安装教程_wsl ubuntu 如何连接 window上安装的数据库-CSDN博客
在windows下远程调用、连接(navicat)wsl2中 mysql 8.* 的详细步骤_wsl如何通过navicate连接mysql-CSDN博客
VS Code server for WSL closed unexpectedly check WSL terminal for more details_vs code server for wsl closed unexpectedly. check -CSDN博客
用户环境管理
是的,同时使用两个 Miniconda 安装是可行的,但需要一些配置来避免冲突。以下是一些步骤和注意事项,以便你可以在不同的上下文中使用这两个 Miniconda 安装:
1. 配置环境变量
确保每个 Miniconda 安装的路径都正确配置在不同的环境中,而不会相互干扰。
在用户环境中使用 Miniconda
- 编辑用户的
.bashrc或.bash_profile文件:1
nano ~/.bashrc
- 添加以下内容来设置 Miniconda 环境变量:
1
export PATH="/home/dujiafeng/miniconda3/bin:$PATH"
- 保存并关闭文件,然后使更改生效:
1
source ~/.bashrc
在 root 环境中使用 Miniconda
- 编辑 root 的
.bashrc或.bash_profile文件:1
sudo nano /root/.bashrc
- 添加以下内容来设置 Miniconda 环境变量:
1
export PATH="/root/miniconda3/bin:$PATH"
- 保存并关闭文件,然后使更改生效:
1
sudo source /root/.bashrc
2. 使用不同的环境文件
为确保在不同用户下使用不同的 Miniconda 环境,可以使用不同的环境文件来激活环境。
在用户环境中激活环境
- 确保你在用户环境下:
1
su - dujiafeng
- 激活环境:
1
2source ~/miniconda3/bin/activate
conda activate <environment_name>
在 root 环境中激活环境
- 确保你在 root 环境下:
1
sudo su
- 激活环境:
1
2source /root/miniconda3/bin/activate
conda activate <environment_name>
3. 创建别名以便切换
为了方便切换,可以在 .bashrc 或 .bash_profile 文件中创建别名。
在用户环境中创建别名
- 编辑用户的
.bashrc文件:1
nano ~/.bashrc
- 添加别名:
1
alias user_conda="source ~/miniconda3/bin/activate"
- 保存并关闭文件,然后使更改生效:
1
source ~/.bashrc
在 root 环境中创建别名
- 编辑 root 的
.bashrc文件:1
sudo nano /root/.bashrc
- 添加别名:
1
alias root_conda="source /root/miniconda3/bin/activate"
- 保存并关闭文件,然后使更改生效:
1
sudo source /root/.bashrc
切换和使用
现在,你可以使用以下命令在用户和 root 环境中切换和使用 Miniconda:
在用户环境中:
1
2user_conda
conda activate <environment_name>在 root 环境中:
1
2sudo root_conda
conda activate <environment_name>
通过这些步骤,你应该能够在不同的环境中使用两个 Miniconda 安装而不会互相干扰。如果有任何问题或需要进一步的帮助,请告诉我。
WSL Ubuntu22.04默认用户(default用户)更改_wsl ubuntu切换用户-CSDN博客
解决”wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理” - JustInCase - 博客园 (cnblogs.com)
【Linux】自定义WSL2安装位置,安装到其他磁盘(非C盘)_wsl2指定安装路径-CSDN博客
DATABASE
在 Ubuntu Server 22 中安装和配置 MongoDB (sjkjc.com)
在 WSL (Windows Subsystem for Linux) 中设置 MySQL 服务开机自启动可以通过修改 .bashrc 文件来实现。因为 WSL 没有完整的 systemd 服务管理系统,所以我们需要在用户登录时启动 MySQL 服务。
步骤1:编辑 .bashrc 文件
打开你的 .bashrc 文件:
1 | nano ~/.bashrc |
步骤2:添加启动 MySQL 服务的命令
在文件末尾添加以下命令,以便在每次打开 WSL 终端时启动 MySQL 服务:
1 | # 启动 MySQL 服务 |
这行命令将确保每次打开 WSL 终端时,MySQL 服务都会自动启动。
步骤3:保存并关闭 .bashrc 文件
按 Ctrl+O 保存文件,然后按 Ctrl+X 退出编辑器。
步骤4:重新加载 .bashrc 文件
重新加载 .bashrc 文件,使更改生效:
1 | source ~/.bashrc |
确认设置是否生效
关闭 WSL 终端并重新打开,或者重新启动 WSL,然后检查 MySQL 服务是否已启动:
1 | sudo service mysql status |
注意事项
由于 WSL 的设计特点,每次重启 Windows 或关闭 WSL 会停止所有服务。如果你希望在每次启动 WSL 时自动启动 MySQL,这种方法是有效的。然而,直接通过 .bashrc 文件管理服务可能会导致权限问题。为了解决这些问题,可以使用 sudo 配置不需要密码。
配置 sudo 以不需要密码(可选)
编辑 sudoers 文件:
1
sudo visudo
添加以下行(将
username替换为你的 WSL 用户名):1
username ALL=(ALL) NOPASSWD: /usr/sbin/service mysql start
这样可以确保在 .bashrc 文件中运行 sudo service mysql start 时不需要输入密码。
通过以上步骤,你可以设置 MySQL 服务在 WSL 启动时自动启动。请注意,这种方法适用于 WSL 环境,并且假设你可以修改 .bashrc 文件和 sudoers 配置。
nginx配置域名
如果您希望将http://47.98.121.213:8688的内容通过域名www.welltransai.com访问,那么您有两种选择:
使用端口80:将Nginx配置为监听80端口,并通过反向代理将请求转发到8688端口。这是最常见的做法,因为用户无需指定端口号,访问体验更好。
使用端口8688:直接在Nginx配置中使用8688端口,但用户需要在访问时指定端口号。
方案1:使用端口80并通过反向代理转发到8688
这是推荐的方案,可以让用户只需访问 http://www.welltransai.com,不需要指定端口号。
步骤 1: 编辑Nginx配置文件
打开Nginx虚拟主机配置文件:
1
sudo vim /etc/nginx/sites-available/welltransai.com
添加以下配置,使用80端口并反向代理到8688端口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 80;
server_name www.welltransai.com;
location / {
proxy_pass http://47.98.121.213:8688;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
}
步骤 2: 创建符号链接到sites-enabled目录
进入sites-enabled目录:
1
cd /etc/nginx/sites-enabled/
创建符号链接:
1
sudo ln -s /etc/nginx/sites-available/welltransai.com
步骤 3: 测试并重新加载Nginx配置
测试Nginx配置是否正确:
1
sudo nginx -t
如果配置正确,重新加载Nginx:
1
sudo systemctl reload nginx
步骤 4: 配置域名解析
- 登录到阿里云域名管理控制台。
- **找到您的域名
www.welltransai.com**,并添加一条A记录,指向您的ECS实例IP地址(47.98.121.213)。
完成以上步骤后,用户可以通过 http://www.welltransai.com 访问您的静态网页。
方案2:直接使用8688端口
如果您决定直接使用8688端口,那么在Nginx配置中应设置为8688端口,但用户需要在访问时指定端口号。
编辑Nginx配置文件
打开Nginx虚拟主机配置文件:
1
sudo vim /etc/nginx/sites-available/welltransai.com
添加以下配置,使用8688端口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server {
listen 8688;
server_name www.welltransai.com;
location / {
root /home/zhanyuan/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
}
创建符号链接到sites-enabled目录
进入sites-enabled目录:
1
cd /etc/nginx/sites-enabled/
创建符号链接:
1
sudo ln -s /etc/nginx/sites-available/welltransai.com
测试并重新加载Nginx配置
测试Nginx配置是否正确:
1
sudo nginx -t
如果配置正确,重新加载Nginx:
1
sudo systemctl reload nginx
配置域名解析
- 登录到阿里云域名管理控制台。
- **找到您的域名
www.welltransai.com**,并添加一条A记录,指向您的ECS实例IP地址(47.98.121.213)。
完成以上步骤后,用户可以通过 http://www.welltransai.com:8688 访问您的静态网页。
总结
推荐使用方案1,这样用户无需指定端口号,访问体验更好。方案2虽然简单,但需要用户每次访问时都指定端口号,不太方便。
数据标注
YOLO 算法的自定义数据集制作及模型训练方法(附代码)yolo格式数据集-CSDN博客
使用labelimg框图闪退报错(TypeError: arguments did not match any overloaded call)在以下三行改变 drawrect,drawline 的参数为 int-CSDN博客
flask上线
是的,Flask 是一个轻量级的 Python Web 框架,非常适合构建小型应用或 API。将 Flask 应用部署并通过外部访问涉及以下步骤:
1. 准备环境
首先,确保你已经安装了 Flask 及其依赖项。如果没有,可以通过以下命令安装:
1 | pip install flask |
2. 创建一个简单的 Flask 应用
这是一个简单的 Flask 应用示例:
1 | from flask import Flask |
3. 运行 Flask 应用
在开发环境中,可以直接运行 Flask 应用:
1 | python app.py |
这会启动 Flask 服务器,默认在 localhost 的端口 5000 运行。
4. 配置外部访问
要使外部设备能够访问你的 Flask 应用,你需要将 host 参数设置为 0.0.0.0,这表示 Flask 应用将监听所有可用的网络接口,而不仅仅是本地回环接口。
1 | if __name__ == '__main__': |
5. 配置防火墙和网络
确保你的服务器或主机的防火墙允许外部访问 Flask 应用所使用的端口(例如 5000)。在 Linux 系统中,可以使用 ufw 来打开端口:
1 | sudo ufw allow 5000 |
如果你在云服务器上部署,如 AWS EC2,确保安全组允许端口 5000 的入站流量。
6. 使用生产级 WSGI 服务器
Flask 自带的开发服务器不适合生产环境。在生产环境中,你应该使用 WSGI 服务器(如 gunicorn 或 uWSGI)来运行 Flask 应用,并使用反向代理(如 Nginx)来处理请求。
例如,使用 gunicorn 运行 Flask 应用:
1 | pip install gunicorn |
这里,-w 4 表示使用 4 个工作进程,-b 0.0.0.0:5000 表示绑定到所有网络接口的 5000 端口。
7. 配置 Nginx 反向代理
配置 Nginx 反向代理是为了将外部的请求转发给你的 Flask 应用,从而实现更好的性能、安全性以及负载均衡。Nginx 是一个高性能的 HTTP 和反向代理服务器,在生产环境中常用来处理客户端请求,并将请求转发给应用服务器(如 Gunicorn)。
配置步骤:
1. 安装 Nginx
在大多数 Linux 发行版中,你可以通过包管理器来安装 Nginx。例如,在 Ubuntu 中,可以使用以下命令:
1 | sudo apt update |
安装完成后,你可以使用以下命令启动 Nginx:
1 | sudo systemctl start nginx |
你可以检查 Nginx 的状态以确保它正在运行:
1 | sudo systemctl status nginx |
2. 配置 Nginx 反向代理
接下来,你需要配置 Nginx,将它设置为反向代理服务器,使其将收到的请求转发给在 Gunicorn 上运行的 Flask 应用。
在 Nginx 配置目录中,通常位于 /etc/nginx/sites-available/,创建一个新的配置文件。例如,创建一个名为 flask_app 的配置文件:
1 | sudo nano /etc/nginx/sites-available/flask_app |
在文件中添加以下内容:
1 | server { |
解释:
- listen 80: Nginx 将监听端口 80 上的所有请求,这通常是 HTTP 的默认端口。
- server_name: 这是你的服务器的域名或 IP 地址,用于区分不同的虚拟主机。你可以用
your_domain_or_IP替换为你实际的域名或服务器 IP。 - location /: 这定义了根路径下的请求如何处理。
/表示匹配所有路径。 - proxy_pass: 这是最重要的指令,它告诉 Nginx 将匹配的请求转发到
http://127.0.0.1:5000,即在本地端口 5000 上运行的 Gunicorn 服务器。 - proxy_set_header: 这些指令用来设置请求头信息,确保请求信息如客户端 IP 地址等能正确传递给后台服务器。
3. 启用配置
保存并关闭文件后,需要在 sites-enabled 目录中启用该配置。你可以通过创建符号链接实现这一点:
1 | sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled |
然后,测试 Nginx 配置是否正确:
1 | sudo nginx -t |
如果没有错误,重启 Nginx 以应用新配置:
1 | sudo systemctl restart nginx |
4. 打开防火墙端口
确保防火墙允许 HTTP 流量(端口 80)。在 Ubuntu 中,可以使用 ufw 来允许 HTTP 流量:
1 | sudo ufw allow 'Nginx Full' |
5. 访问你的 Flask 应用
现在,你应该可以通过浏览器访问 your_domain_or_IP,Nginx 将处理请求并将其转发给在 Gunicorn 上运行的 Flask 应用。如果一切配置正确,你的应用应该可以通过外部访问。
总结:
通过配置 Nginx 反向代理,你可以让 Nginx 处理所有外部请求,并将这些请求转发给 Gunicorn 上运行的 Flask 应用。这样做的好处包括更好的性能(Nginx 高效处理静态内容)、增强的安全性(Nginx 作为第一道防线),以及支持更复杂的架构(如负载均衡、SSL 加密等)。
8. 使用域名访问(可选)
如果你有一个域名,可以将其指向服务器的 IP 地址,然后通过域名访问你的 Flask 应用。确保 DNS 记录已正确配置,并且 Nginx 配置文件中的 server_name 设置了正确的域名。
要保证 Flask 应用一直运行,通常会使用一个进程管理工具来管理和监控应用。supervisord 是一个常用的工具,可以自动启动、停止和重启应用程序。下面是使用 supervisord 来保证 Flask 应用一直运行的步骤。
1. 安装 Supervisord
在 Ubuntu 或 Debian 系统上,你可以使用以下命令安装 supervisor:
1 | sudo apt update |
2. 配置 Supervisord 来管理 Flask 应用
创建一个 supervisord 配置文件,来管理你的 Flask 应用。通常,这个配置文件位于 /etc/supervisor/conf.d/ 目录下。
创建并编辑配置文件,例如命名为 flask_app.conf:
1 | sudo nano /etc/supervisor/conf.d/flask_app.conf |
在文件中添加以下内容:
1 | [program:flask_app] |
解释:
- command: 这是启动 Flask 应用的命令。在这里使用
gunicorn来运行 Flask 应用,你需要将/path/to/your/venv/bin/替换为你的虚拟环境路径,将app:app替换为你的 Flask 应用模块和实例名。 - directory: Flask 应用的工作目录。将
/path/to/your/flask_app替换为你 Flask 应用的路径。 - autostart: 当
supervisord启动时自动启动 Flask 应用。 - autorestart: 如果 Flask 应用崩溃或被意外终止,
supervisord会自动重新启动它。 - stderr_logfile 和 stdout_logfile: 错误日志和标准输出日志的路径,可以帮助你监控应用运行状态。
- user: 运行 Flask 应用的用户,将
your_username替换为运行应用的用户。 - environment: 用于设置 Flask 应用运行的环境变量,尤其是
PATH,确保supervisord能找到虚拟环境中的gunicorn。
3. 更新并启动 Supervisord
保存配置文件后,更新 supervisord 配置以加载新的服务:
1 | sudo supervisorctl reread |
接着启动 Flask 应用:
1 | sudo supervisorctl start flask_app |
4. 检查应用状态
你可以使用以下命令查看 Flask 应用的状态:
1 | sudo supervisorctl status flask_app |
如果你修改了 Flask 应用的代码,通常需要重新启动 Flask 应用,以使更改生效。使用 supervisor 管理 Flask 应用时,有几种方法可以处理这种情况。
1. 使用 supervisor 重启 Flask 应用
你可以通过 supervisor 提供的命令来重启 Flask 应用,这样可以确保新的代码生效:
1 | sudo supervisorctl restart flask_app |
这将停止并重新启动 Flask 应用程序。flask_app 是你在 supervisor 配置中定义的程序名称。
2. 自动重启(选项)
如果你想让应用在代码更改时自动重启,可以使用 supervisor 的 autorestart 选项。该选项已经在你之前的配置中设置为 true,即:
1 | autorestart=true |
然而,这个配置通常是应用程序崩溃时才会自动重启。如果你想让应用在代码更改时自动重启,需要配合 supervisor 的 reloader 模式(Flask 内置的热加载机制)或使用其他工具(例如 watchdog)来监控文件变动并触发重启。
3. 使用 Flask 的 debug 模式(开发环境)
在开发环境中,您可以通过启用 Flask 的 debug 模式来自动重载代码。当代码发生更改时,Flask 应用会自动重新加载。你可以在运行 flask run 或 gunicorn 时通过设置环境变量或在代码中启用 debug 模式。
1 | if __name__ == '__main__': |
4. 重新加载 gunicorn
如果你使用 gunicorn,也可以通过向 gunicorn 主进程发送信号来触发重载,而不需要完全重启 supervisor 服务。
1 | kill -HUP <gunicorn_master_pid> |
这种方法会平滑重启 gunicorn,使其加载新代码,而不影响当前连接的客户端。
5. 强制重启 supervisor 进程
作为最后的手段,你可以通过重启 supervisor 来重启所有由 supervisor 管理的服务:
1 | sudo supervisorctl restart all |
不过,这种方法会重启 supervisor 管理的所有进程,可能不是最优的做法。
supervisor 本身并不直接支持文件变更监控的重新加载功能,但是你可以通过以下几种方法来实现自动重载代码的功能,类似于 Flask 内置的 reloader 模式。
1. 使用 Flask 的 debug 模式
在开发环境中,你可以使用 Flask 的 debug 模式来实现自动重新加载。启用 debug 模式后,Flask 会监控项目中的文件变化,当代码发生变化时,应用会自动重新加载。
在 Flask 代码中,启用 debug 模式如下:
1 | if __name__ == '__main__': |
这种方法非常适合开发环境,但是不推荐在生产环境中使用,因为 debug 模式下的应用性能较差,且存在安全隐患。
2. 使用 gunicorn 的 --reload 选项
在生产环境中,你可以使用 gunicorn 提供的 --reload 选项,该选项可以监控代码变化并自动重启服务器。这个方法和 Flask 的 debug 模式类似,但适用于生产环境。
配置 supervisor 使用 gunicorn 的 --reload 选项,可以在配置文件中这样写:
1 | [program:flask_app] |
3. 使用 watchdog 或 watchmedo 自动重启
watchdog 是一个 Python 库,用于监控文件系统事件。你可以使用 watchdog 的命令行工具 watchmedo 来监控代码变动并触发 supervisorctl restart。
首先,安装 watchdog:
1 | pip install watchdog |
然后,使用以下命令来监控文件变动并重启 supervisor 中的 Flask 应用:
1 | watchmedo auto-restart --directory=./ --pattern=*.py --recursive -- supervisorctl restart flask_app |
--directory=./: 指定要监控的目录,通常是你的 Flask 应用目录。--pattern=*.py: 指定监控的文件模式,这里为.py文件。--recursive: 递归监控子目录中的文件。supervisorctl restart flask_app: 文件变动时要执行的命令,这里是重启supervisor管理的 Flask 应用。
你可以将这个命令写入到 supervisor 配置中作为一个独立的任务:
1 | [program:flask_watcher] |
4. 使用 entr 工具
entr 是一个简洁的 UNIX 工具,用于监控文件系统的变化。可以通过以下方式使用:
1 | ls *.py | entr supervisorctl restart flask_app |
这将在当前目录下监控所有 .py 文件的变化,一旦发生变化,就会重启 Flask 应用。
5. 总结
- 开发环境:使用 Flask 的
debug模式或gunicorn的--reload选项。 - 生产环境:使用
watchdog(或watchmedo)、entr等工具与supervisor配合,自动监控代码变动并重启服务。
这些方法都能让你的 Flask 应用在代码变更后自动重启,确保最新的代码被立即应用。
- 标题: Ubuntu开发工作
- 作者: 迟秋白
- 创建于 : 2024-06-07 09:21:53
- 更新于 : 2025-05-04 18:03:29
- 链接: https://chiqiubai.cn/2024/06/07/Ubuntu开发工作/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
