Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

服务器脚本运行方式

命令行直接执行

如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掉脚本进程。

安装

bash 复制代码
sudo apt update
sudo apt install screen

验证安装:输入 screen --version,若显示版本号则安装成功。

基本操作命令

启动 Screen

bash 复制代码
screen

或指定会话名称:

bash 复制代码
screen -S my_session

退出当前会话(不终止进程)

按 Ctrl+A,然后按 D(分离会话)。

查看所有会话

bash 复制代码
screen -ls

重连会话

上图中该screen的PID是73877

bash 复制代码
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 为前缀,后续按键需快速连续按下。

典型使用场景

后台运行任务

  1. 启动 Screen 会话:

    bash 复制代码
    screen -S long_task
  2. 在会话中运行任务:

    bash 复制代码
    ./my_long_running_script.sh
  3. 按 Ctrl+A D 分离会话,任务继续在后台运行。

多任务并行

  1. 启动多个 Screen 会话:

    bash 复制代码
    screen -S task1
    screen -S task2
  2. 在不同会话中执行任务,使用 Ctrl+A " 切换窗口。

远程服务器管理

  • 通过 SSH 登录服务器后启动 Screen:

    bash 复制代码
    screen -S server_management
  • 执行维护任务,分离会话后断开 SSH,任务不受影响。

  • 重新连接 SSH 后,通过 screen -r server_management 恢复会话。

常见问题

如何杀死挂起的 Screen 会话?

bash 复制代码
screen -S <session_name> -X quit

示例:

bash 复制代码
screen -S my_session -X quit

Screen 会话占用资源如何优化?

  • 使用 tmux 作为替代工具(功能更强大)。
  • 定期清理无用会话:screen -wipe。

supervisor

概述

在部署Supervisor时,Supervisor是一个用于管理多个进程的Python应用程序,通常与Celery这样的任务队列一起使用,以实现分布式任务处理。Supervisor可以监控、启动、停止和管理进程。

安装

bash 复制代码
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

bash 复制代码
[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配置:

bash 复制代码
sudo supervisorctl reread 
sudo supervisorctl update

每次更新后它都会自动启动新配置

命令管理

启动应用

bash 复制代码
sudo supervisorctl start op_js

停止应用

bash 复制代码
sudo supervisorctl stop op_js

重启应用

bash 复制代码
sudo supervisorctl restart op_js

查看应用状态

bash 复制代码
sudo supervisorctl status 
sudo supervisorctl status op_js

管理指令界面

我们可以通过supervisorctl进入指令界面,然后手动更细重启对应的配置项。

配置文件参数明晰

bash 复制代码
[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  # 是否将标准错误重定向到标准输出。
相关推荐
0+1116 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋6 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家7 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890757 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_9498477510 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
今天重构了吗10 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
SEO_juper11 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
Smoothcloud润云11 小时前
GPU远程纳管安全吗?最小权限、网络边界与日志审计实战
服务器·网络·人工智能·安全·gpu算力·gpu
ai大模型-探索者11 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络