当前位置: 首页 > news >正文

Web服务器部署上线踩坑流程回顾

5月份时曾部署上线了C++的Web服务器,温故而知新,本篇文章梳理总结一下部署流程知识;

  • 最初的解决方案:https://blog.csdn.net/BinBinCome/article/details/129750951?spm=1001.2014.3001.5501
  • 后来的解决方案:https://blog.csdn.net/BinBinCome/article/details/129796690?spm=1001.2014.3001.550

以下是本文的大概内容思维导图:
在这里插入图片描述

一、最初的解决方案

原理:
当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

方法1:进程忽略HUP信号

命令:
nohup (no hang up,不挂起):用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
使用:

nohup ./IM_chat >> IMchat.log 2>&1 &- ./IM_chat : 当前文件目录下的新坑项目可执行文件- >> IMchat.log 2>&1: 将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 IMchat.log 文件中- & : 让命令在后台执行,终端退出后命令仍旧执行

其他知识:
1、Linux中的0、1、2: 0是standard input,标准输入,1是standard output,标准输出,2是standard error,标准错误输出
2、停止运行进程的方法:
ps -aux | grep “IM_chat”
Kill - 9 进程号PID
AI回答版知识:
在Linux中,0、1、2是特殊文件描述符,用于表示标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。它们在I/O重定向和管道操作中起着重要的作用。

  1. 标准输入(stdin):文件描述符0,通常与键盘输入相关联。当程序需要从用户获取输入时,可以读取标准输入流来接收用户的输入数据。例如,通过命令行输入或从终端读取数据。
  2. 标准输出(stdout):文件描述符1,通常与显示器相关联。当程序产生输出时,默认会将输出内容发送到标准输出流,并在终端上显示。可以通过重定向操作将标准输出流重定向到文件,以便将输出保存在文件中。
  3. 标准错误(stderr):文件描述符2,通常也与显示器相关联。与标准输出类似,但标准错误流用于输出错误和警告消息,而不是正常的程序输出。通常,错误消息会直接打印到终端上,而不受标准输出重定向的影响。
    这些概念涉及到Linux的输入输出(I/O)机制和文件描述符的概念:
  • 输入输出(I/O):指计算机系统与外部设备之间的数据交换过程。在Linux中,输入可以来自键盘、文件或其他进程的输出。输出可以显示在终端、写入文件或发送给其他进程。
  • 文件描述符:在Linux中,每个打开的文件(包括设备和管道)都与一个唯一的整数标识符相关联,称为文件描述符。0、1和2是预定义的文件描述符,分别对应标准输入、标准输出和标准错误。
  • I/O重定向:通过重定向操作,可以改变程序默认的输入或输出位置。使用特殊的符号(如<、>和>>)将输入/输出从一个源/目标指向另一个源/目标。例如,将命令的输出重定向到文件,或从文件中读取输入而不是键盘。
  • 管道操作:管道允许将一个进程的输出直接传递给另一个进程的输入,以实现进程间通信。通过使用|符号,可以将一个命令的输出连接到另一个命令的输入,形成一个管道链。
    这些机制使得在Linux系统中可以方便地控制输入和输出流,以及处理输入输出的重定向和管道操作,从而增强了程序的灵活性和可扩展性。

方法2:进程运行在新会话

服务跑起来后,过了段时间访问自己的写的webserver服务器里放的个人主页页面发现竟然挂了!于是检查日志没发现啥问题,于是尝试让进程运行在新会话的方法;
screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。如果有大量命令需要在稳定的后台里运行,可以避免对每条命令都做这样的操作;

yum -y install   screen                # 安装screen
screen -dmS sessionname         # 建立一个处于断开模式下的会话,sessionname可更改为自己的服务名
screen -list                                 # 列出所有会话,查看是否建立会话
screen -r sessionname                 # 重新连接指定会话,运行自己的服务

用快捷键CTRL + a + d 来暂时断开当前会话。退出终端连接,查看服务是否稳定运行

本次最初方案即srceen中组合nohup加上&的组合拳,终极版还能加上systemctl配置开机自启!的参考文章:

  • https://www.linuxprobe.com/process-run-in-background.html
  • https://blog.csdn.net/Pan_peter/article/details/128875714

二、后来的解决方案

平稳运行大概大半个月后,偶然发现服务又挂了,不能忍了个人主页谁天天看在不在运行啊!直接上脚本每一段时间自动检测一下服务是否运行中,没运行的话就重启一下!(以下脚本可自己定义去修改,非正式使用脚本)

#!/bin/shwhile truedops -ef | grep "temporaryfile" | grep -v "grep"
#查找系统中含有"temporaryfile"字符的进程,并且排除grep本身的进程。
if [ "$?" -eq 1 ]
#如果未运行
thenpython3 /home/xxx/xxxxxx.py
#启动应用,修改成自己的启动应用脚本或命令echo "process has been restarted!"elseecho "process already started!"fisleep 60done

参考文章:https://zhuanlan.zhihu.com/p/599421452

三、最后的思考

虽然脚本的办法挺不错的,服务一直运行到今天2023/9/3都没有挂过,但是不由得思考两个问题
1、最开始的webserver服务为什么会挂掉?看日志也没有分析出原因
2、大型企业的后台服务是怎样运行维护的呢?不至于我这样一个一个的手动启动和查进程关闭或者使用脚本吧

ai回答:
大型公司的后台Linux部署通常采用更为复杂和全面的解决方案。这些解决方案可能包括:

  1. 容器化技术:使用容器技术(如Docker)将应用程序和其依赖项打包成可移植的容器镜像,从而实现隔离和可扩展性。
  2. 自动化部署:使用自动化工具(如Ansible、Chef或Puppet)来管理和部署服务器和应用程序,实现快速、可靠的部署过程。
  3. 高可用性和负载均衡:使用负载均衡器和集群管理工具,确保系统的高可用性和可扩展性。
  4. 日志和监控:使用日志记录和监控工具(如ELK堆栈、Prometheus、Grafana等)来收集、分析和监视系统的运行情况,以及进行故障排除和性能优化。

服务挂掉的原因由于时间久远(大概几个月前)很难追溯了,但是第二个问题却是可以继续推动无限进步!

1、Docker技术: 看完了w3c教程成功入门并用其搭建vulhub靶场过;https://www.w3cschool.cn/docker/docker-command-manual.html
2、自动化部署工具: K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,这个看来得学学了;
3、负载均衡和高可用 : 负载均衡集群–知乎,打开新世界大门原来负载均衡技术的实现除了我知道的nginx软件技术以外还有硬件技术的实现;
4、日志和监控工具:Elastic Stack(Elasticsearch Logstash 和 Kibana)
Elastic Stack,通常缩写为ELK,是一种流行的三合一日志集中、解析和可视化工具,可将来自多台服务器的大量数据和日志集中到一台服务器中。
ELK Stack 包含 3 种不同的产品:
Logstash
Logstash是一个免费的开源数据管道,它收集日志和事件数据,甚至处理数据并将其转换为所需的输出。使用名为“ beats ”的代理将数据从远程服务器发送到logstash。“ beats ”将大量系统指标和日志发送到Logstash,然后对其进行处理。然后它将数据提供给Elasticsearch。
弹性搜索
Elasticsearch基于Apache Lucene构建,是一个开源分布式搜索和分析引擎,适用于几乎所有类型的数据——包括结构化和非结构化数据。这包括文本、数字和地理空间数据。
它于 2010 年首次发布。Elasticsearch是ELK堆栈的核心组件,以其速度、可扩展性和 REST API 着称。它存储、索引和分析从Logstash传递的大量数据。
Kibana
数据最终传递给Kibana,这是一个与Elasticsearch一起运行的 WebUI 可视化平台。Kibana允许您探索和可视化来自 elasticsearch 的时间序列数据和日志。它在直观的仪表板上可视化数据和日志,这些仪表板采用各种形式,例如条形图、饼图、直方图等。

要学的东西还有很多啊,无限进步! 以下是一些参考文章。

参考文章:

  1. https://zhuanlan.zhihu.com/p/604456459#:~:text=6%E4%B8%AA%E6%AF%94%E8%BE%83%E5%A5%BD%E7%94%A8%E7%9A%84%E5%BC%80%E6%BA%90%E9%9B%86%E4%B8%AD%E5%BC%8F%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7%201%201%E3%80%81ManageEngine%20Log360%202%202%E3%80%81Elastic%20Stack%EF%BC%88Elasticsearch%20Logstash,3%203%E3%80%81Graylog%204%204%E3%80%81Fluentd%205%205%E3%80%81LOGalyze%206%206%E3%80%81NXlog
  2. https://zhuanlan.zhihu.com/p/231806045#%E9%9B%86%E7%BE%A4%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F
  3. https://zhuanlan.zhihu.com/p/38982164
  4. https://kubernetes.io/

相关文章:

Web服务器部署上线踩坑流程回顾

5月份时曾部署上线了C的Web服务器&#xff0c;温故而知新&#xff0c;本篇文章梳理总结一下部署流程知识&#xff1b; 最初的解决方案&#xff1a;https://blog.csdn.net/BinBinCome/article/details/129750951?spm1001.2014.3001.5501后来的解决方案&#xff1a;https://blog…...

目标检测YOLO实战应用案例100讲-基于卷积神经网络的小样本机载雷达动目标检测

目录 前言 机载雷达动目标检测方法及深度学习理论基础 2.1引言 2.2机载雷达回波信号模型...

SpringBoot 的 MVC

1.1 MVC定义 MVC是Model、View、Controller的缩写&#xff0c;它是软件工程当中的一种软甲架构模式&#xff0c;它把软件系统分为模型 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据View&#xff08;视图&#xff09;是应用程…...

springboot上线打包+vuecli2部署在linux服务器上(打包上线)

这里也是记录一下springboot的上线打包流程,我这里前端使用的是vuecli2 springboot的依赖是2.7.9的版本 前端是使用的vue2 打包前,你的linux上必须要先安装,tomcat\java\nginx springboot打包 springboot打包点击一下,等maven编译打包成功在target文件下找到,jar包, 然后,把j…...

Postern配置HTTP和HTTPS的步骤

Postern是一款强大的Android代理工具&#xff0c;它允许您在设备上配置全局代理来实现安全、隐私保护和自由上网。本文将详细介绍如何使用Postern在Android设备上配置HTTP和HTTPS代理&#xff0c;为您提供更便捷的上网体验。 步骤1&#xff1a;下载和安装Postern应用 首先&am…...

DataTableResponseEntity

/// <summary>/// DataTable数据集合返回实体/// </summary>[Serializable]public sealed class DataTableResponseEntity : IResponse{private readonly DataTable sourceTable;private readonly int PageCount;private readonly int totalCount;private readonly…...

Python爬虫(十八)_多线程糗事百科案例

多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:https://cloud.tencent.com/developer/article/1021994 Queue(队列对象) Queue是python中的标准库&#xff0c;可以直接import Queue引用&#xff1b;队列时线程间最常用的交互数据的形式。 python下多线程的思考…...

无穷级数重要知识点

部分和 s ∑ i 1 n u i s \sum_{i1}^{n} u _{i} si1∑n​ui​ 注意&#xff1a;部分和不是数列的一部分之和&#xff0c;而是一个极限的概念&#xff0c;此处的n是一个极限值&#xff0c; n 趋于正无穷&#xff01; \color{red}n趋于正无穷&#xff01; n趋于正无穷&#x…...

【MyBatis】快速入门

1、简介 MyBatis是一个持久化、轻量级的半自动化ORM框架&#xff0c;封装了所有JDBC的原始操作。查询参数以及获取结果集等。 1.1 原始JDBC操作存在的问题 &#xff08;1&#xff09;数据库连接、释放频繁造成系统资源浪费&#xff0c;影响系统性能 &#xff08;2&#xff09;…...

【gtpJavaScript】使用JavaScript实现套壳gtp与gtp打字输出效果

postman测试gtp接口 https://platform.openai.com/docs/api-reference/chat/create?langcurl 导入到postman中 记得弄一个gtp的key 然后请求测试gtp接口&#xff1a; 纯前端实现gtp请求页面 目录结构&#xff1a; 部分参考&#xff1a;GitHub - xxxjkk/chat-website: 简易版c…...

C++内存管理(2)new、delete详解

目录 new operator&#xff08;new操作&#xff09; new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作&#xff08;对比malloc和free&#xff09; new和delete操作基本类型的空间 new和delete操作基本类型的数组 new和delete操作类的…...

ELK集群搭建流程(实践可用)

一、概述 ELK 是一个由三个开源软件工具组成的数据处理和可视化平台&#xff0c;包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。 Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;可以将大量数据存储在一个或多个节点上&#xf…...

react-quill富文本 中文输入法触发change问题

使用的富文本是编辑器 react-quill 需求&#xff1a; 点击按钮插入自定义颜色文字&#xff0c;然后手动输入为正常颜色。 问题&#xff1a; quill组件把带颜色的字体创建个dom, 临近的文字都会整合进一个dom中&#xff0c;导致输入的文字和插入的带颜色 都统一成一个颜色了…...

Upload-labs 1~15 通关详细教程

文章目录 Upload-labs 1~15 通关详细教程Pass-01-前端js验证Pass-02-后端MIME验证Pass-03-黑名单验证Pass-04-黑名单验证.htaccessPass-05-文件后缀名大小写绕过Pass-06-文件后缀名空格绕过Pass-07-文件后缀名点绕过Pass-08-文件后缀名::$DATA绕过Pass-09-点空格点空格绕过Pass…...

ChatGPT分析日本排放核污水对世界的影响

文章目录 1 背景2 环境影响3 健康影响4 国际关系影响5 应对措施 近段时间被日本排放核污水到海里的消息刷屏了&#xff0c;这一举措引发了广泛的关注和担忧。本文结合ChatGPT来分析这件事的前因后果、会对世界造成的影响、以及应对措施。 1 背景 受2011年发生的大地震及海啸影响…...

eclipse进入断点之后,一直卡死,线程一直在运行【记录一种情况】

问题描述: 一直卡死在某个断点处&#xff0c;取消断点也是卡死在这边的进程处。 解决方式&#xff1a; 将JDK的使用内存进行了修改 ① 打开eclipse&#xff0c;window->preference->Java->Installed JREs&#xff0c;选中使用的jdk然后点击右侧的edit&#xff0c;在…...

2.5 动态字符串 String (完整源码)

C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 本文的实现基本上和 动态数组 vector 是一样的。 因为大部分接口都一样。 所以&#xff0c;本文就直接给出全部的源码和运行结果。 //------下面的代码是用来测试你的代码有没有问题的辅助代码…...

Ansible之变量

一&#xff09;Ansible变量介绍 我们在PlayBook⼀节中&#xff0c;将PlayBook类⽐成了Linux中的shell。 那么它作为⼀⻔Ansible特殊的语⾔&#xff0c;肯定要涉及到变量定义、控 制结构的使⽤等特性。 在这⼀节中主要讨论变量的定义和使⽤ 二&#xff09;变量命名规则 变量的…...

自动化测试面试常见技术题目

1&#xff1a;一行代码实现1--100之和 print(sum(list(range(1,101)))) 2&#xff1a;如何在一个函数内部修改全局变量 global  修改全局变量 局部作用域只能调用全局作用域的变量&#xff0c;但是不熊修改全局作用域的变量&#xff0c;如果想要修改全局作用域的变量需要gl…...

aarch64 arm64 部署 stable diffusion webui 笔记 【2】继续安装其他依赖 gfpgan

接上篇 aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda_hkNaruto的博客-CSDN博客 编辑requirements_versions.txt&#xff0c;注释掉torch 启动webui.sh (venv) [rootceph3 stable-diffusion-webui]# useradd yeqiang useradd&#xf…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...