Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
- 服务器脚本运行方式
- 命令行直接执行
- nohup后台执行进程
- Screen
- 概述
- 安装
- 基本操作命令
- 启动 Screen
- 退出当前会话(不终止进程)
- 查看所有会话
- 重连会话
- 关闭会话
- 常用快捷键
- 典型使用场景
- 后台运行任务
- 多任务并行
- 远程服务器管理
- 常见问题
- 如何杀死挂起的 Screen 会话?
- Screen 会话占用资源如何优化?
- supervisor
- 概述
- 安装
- 文件解读
- 添加配置文件
- 命令管理
- 启动应用
- 停止应用
- 重启应用
- 查看应用状态
- 管理指令界面
- 配置文件参数明晰
服务器脚本运行方式
命令行直接执行
如nodejs main.js
,python main.py
,由于一直挂在窗口,一般用于开发测试。
nohup后台执行进程
也就是在命令行直接执行时加上&
:
可以在nohup命令中直接使用重定向操作符来将标准输出(stdout)和标准错误(stderr)都重定向到同一个日志文件,如:nohup your_command > output.log 2>&1 &
,这里:
>
是输出重定向操作符,它将标准输出(stdout)重定向到output.log文件;2>&1
表示将标准错误(stderr)也重定向到标准输出(即重定向到output.log);&
是让命令在后台运行的符号。
以下是针对screen
工具 的入门文档,涵盖基础安装、常用命令及典型使用场景,适合初学者快速上手:
Screen
概述
screen
是一个终端会话管理工具,支持:
- 多窗口管理(在一个终端中切换多个会话)
- 会话分离与重连(断开连接后仍可恢复)
- 后台运行任务(即使关闭终端,进程仍继续运行)
其实就是它可以新开多窗口,我们能在其它窗口直接适用命令行运行脚本,一个是不会影响其它操作,另一个是退出后不会kill掉脚本进程。
安装
sudo apt update
sudo apt install screen
验证安装:输入 screen --version
,若显示版本号则安装成功。
基本操作命令
启动 Screen
screen
或指定会话名称:
screen -S my_session
退出当前会话(不终止进程)
按 Ctrl+A
,然后按 D
(分离会话)。
查看所有会话
screen -ls
重连会话
上图中该screen
的PID
是73877
screen -r 73877 # 使用 PID 重连
# 或
screen -r my_session # 使用会话名称重连
关闭会话
重连会话后,输入 exit
或按 Ctrl+D
。
常用快捷键
快捷键 | 功能 |
---|---|
Ctrl+A C | 创建新窗口 |
Ctrl+A N | 切换到下一个窗口 |
Ctrl+A P | 切换到上一个窗口 |
Ctrl+A " | 显示窗口列表并切换 |
Ctrl+A D | 分离当前会话 |
Ctrl+A K | 关闭当前窗口 |
提示:所有快捷键均以 Ctrl+A
为前缀,后续按键需快速连续按下。
典型使用场景
后台运行任务
- 启动 Screen 会话:
screen -S long_task
- 在会话中运行任务:
./my_long_running_script.sh
- 按
Ctrl+A
D
分离会话,任务继续在后台运行。
多任务并行
- 启动多个 Screen 会话:
screen -S task1 screen -S task2
- 在不同会话中执行任务,使用
Ctrl+A
"
切换窗口。
远程服务器管理
- 通过 SSH 登录服务器后启动 Screen:
screen -S server_management
- 执行维护任务,分离会话后断开 SSH,任务不受影响。
- 重新连接 SSH 后,通过
screen -r server_management
恢复会话。
常见问题
如何杀死挂起的 Screen 会话?
screen -S <session_name> -X quit
示例:
screen -S my_session -X quit
Screen 会话占用资源如何优化?
- 使用
tmux
作为替代工具(功能更强大)。 - 定期清理无用会话:
screen -wipe
。
supervisor
概述
在部署Supervisor时,Supervisor是一个用于管理多个进程的Python应用程序,通常与Celery这样的任务队列一起使用,以实现分布式任务处理。Supervisor可以监控、启动、停止和管理进程。
安装
sudo apt-get update
sudo apt-get install supervisor
验证安装成功:supervisorctl --help
文件解读
supervisor所在文件路径:/etc/supervisor
此目录下有子目录conf.d
和子文件supervisord.conf
,其中:
conf.d
用来存放后续新增的进程配置文件supervisord.conf
属于supervisor的配置文件
添加配置文件
以nodejs
为例,进入/etc/supervisor/conf.d
新增op_js.conf
[program:op_js]
command=nodejs /home/OmniEnvPatch/main.js
directory=/home/OmniEnvPatch
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/op_js.err.log
stdout_logfile=/var/log/op_js.out.log
每次修改或添加新的配置文件后,需要重新加载Supervisor配置:
sudo supervisorctl reread
sudo supervisorctl update
每次更新后它都会自动启动新配置
命令管理
启动应用
sudo supervisorctl start op_js
停止应用
sudo supervisorctl stop op_js
重启应用
sudo supervisorctl restart op_js
查看应用状态
sudo supervisorctl status
sudo supervisorctl status op_js
管理指令界面
我们可以通过supervisorctl
进入指令界面,然后手动更细重启对应的配置项。
配置文件参数明晰
[program:op_js] # 配置项名,如此处是op_js
command=/path/to/command arg1 arg2 # 要执行的命令及其参数。
process_name=%(program_name)s_%(process_num)02d # 使用多进程时,需要配置该参数,实现动态生成进程名。
numprocs=1 # 启动的进程数量。
loglevel=info # 记录级别,指示写入supervisord活动日志的内容。
numprocs_start=1 # 从12001开始占用端口
directory=/path/to/directory # 进程的工作目录。
autostart=true # 是否在supervisord启动时自动启动这个程序。
autorestart=true # 是否在程序退出时自动重启。
startsecs=1 # 启动后多久才算启动成功(秒)。
startretries=3 # 启动失败时的重试次数。
stdout_logfile=/path/to/stdout.log # 标准输出的日志文件路径。
stderr_logfile=/path/to/stderr.log # 标准错误的日志文件路径。
redirect_stderr=true # 是否将标准错误重定向到标准输出。