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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关村第十二关——不简单的字符串转换问题

前言 字符串是我们在日常开发中最常处理的数据&#xff0c;虽然它本身不是一种数据结构&#xff0c;但是由于其可以包含所有信息&#xff0c;所以通常作为数据的一种形式出现&#xff0c;由于不同语言创建和管理字符串的方式也各有差异&#xff0c;因此针对不同语言特征又产生…

阿里云2核2G云服务器租用价格表_一年费用_1个月和1小时收费

阿里云2核2G服务器多少钱一年&#xff1f;108元一年&#xff0c;折合9元一个月&#xff0c;配置为2核CPU、2G内存、3M带宽、50GB高效云盘的轻量应用服务器&#xff0c;如果是云服务器ECS&#xff0c;2核2G配置可以选择ECS通用算力型u1实例、突发性能实例t6和t5实例、密集计算型…

如何使用HTML和CSS创建动画条形图?

概述 动画栏是使用 HTML 和 CSS 创建的图形动画栏。动画栏的布局是使用 HTML 创建的&#xff0c;栏的样式是使用 CSS 制作的。普通的条形图可以正常创建&#xff0c;但我们必须创建带有动画的条形图&#xff0c;因此我们将使用 CSS 过渡动画属性来使其具有动画效果。我们将构建…

03-zookeeper节点动态上下线案例

服务器动态上下线监听案例 需求 在分布式系统中&#xff0c;主节点可以有多台&#xff0c;可以动态上下线&#xff0c;任意一台客户端都能实时感知到主节点服务器的上下线。 需求分析 客户端能实时洞察到服务器上下线的变化 基本流程&#xff1a; ​ 1.服务端启动时去注册…

300. 最长递增子序列

题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示…

一米facebook功能点

用户信息批量修改 可批量修改已登录用户的头像、密码、个人说明等信息。 小号批量刷赞、评论 可以批量用facebook小号给帖子、主页等刷赞或评论。 直播帖刷人气/评论/分享 可以直接刷直播帖子的人气、评论&#xff0c;并可一键分享到小组或个人时间线、公共主页等。 小组成员…

【Java】Java核心API概述

Java核心API是Java编程语言的基础&#xff0c;包含了Java应用程序中常用的类和接口。本文将介绍Java核心API中的一些重要部分&#xff0c;包括输入输出流、异常处理、集合框架、多线程和网络编程等。 1、输入输出流 Java的输入输出流API是Java IO&#xff0c;它提供了处理输入…

使用Apache Doris自动同步整个 MySQL/Oracle 数据库进行数据分析

Flink-Doris-Connector 1.4.0 允许用户一步将包含数千个表的整个数据库&#xff08;MySQL或Oracle &#xff09;摄取到Apache Doris&#xff08;一种实时分析数据库&#xff09;中。 通过内置的Flink CDC&#xff0c;连接器可以直接将上游源的表模式和数据同步到Apache Doris&…

ChatGPT AIGC 完成超炫酷的大屏可视化

大屏可视化一直各大企业进行数据决策的重要可视化方式,接下来我们先来看一下ChatGPT,AIGC人工智能帮我们实现的综合案例大屏可视化效果: 公众号:BI智能数据分析 像这样的大屏可视化使用HTML,JS,Echarts就可以来完成,给ChatGPT,AIGC发送指令的同时可以将数据一起发送给…

如何实现小程序与h5页面间的跳转

接到新需求&#xff0c;要在小程序页面内点击按钮实现跳转h5&#xff0c;一开始没接触过&#xff0c;还挺头疼的&#xff0c;但真正做起来&#xff0c;也就那么一回事啦&#xff0c;废话少说&#xff0c;直接上 1. 配置域名 先登录小程序开发平台&#xff0c;将页面需要跳转的…

英语语法笔记

1.英语五大句型 主谓&#xff08;主语动词&#xff09; 主谓宾&#xff08;主语动词宾语&#xff09; 主谓宾宾&#xff08;主语动词简接宾语直接宾语&#xff09; 主谓宾补&#xff08;主语动词宾语宾语补语&#xff09; 主系表&#xff08;主语系动词主语补语&#xff09; 1…

掌握Python编程:从入门到精通的完整指南

Python是一门流行的编程语言,适用于多种应用领域,包括Web开发、数据分析、人工智能、机器学习等。以下是一个Python入门的大纲,适用于初学者: 第一部分:基础概念 1. Python简介 Python的历史和发展Python的优点和应用领域2. 安装Python 下载和安装Python配置Python开发环…

Java反序列化之CommonsCollections CC1链分析

前言 cc链的研究可以说是非常适合java代码审计的入门篇了&#xff0c;十分考验java代码功力&#xff0c;其实也是基础功&#xff0c;跨过了这个门槛&#xff0c;在看看其他业务代码就会比较轻松了。不要说代码难&#xff0c;看不懂&#xff0c;作者也是刚入门java没几个月的小…

【C++】STL-常用算法-常用查找算法

0.前言 1.find #include <iostream> using namespace std;// 常用查找算法 find #include<vector> #include<algorithm>//查找 内置数据类型 void test01() {vector<int>v;for (int i 0; i < 10; i){v.push_back(i);}//查找 容器中 是否有 5 这个元…

MySQL 存储引擎,你了解几个?

引言 MySQL是一种流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件&#xff0c;它们直接影响着数据库的性能、可靠性和功能&#xff0c;接下来本文介绍下一些常见的MySQL数据…

MySQL的故事——Schema与数据类型优化

Schema与数据类型优化 一、选择优化的数据类型 更小的通常更好 应该尽量使用可以正确存储数据的最小类型&#xff0c;更小的数据类型通常更快&#xff0c;因为他们占用更少的磁盘&#xff0c;内存和CPU缓存&#xff0c;并且处理时需要的CPU周期更少 简单就好 更简单的数据类型…

干涉阵相关知识

文章目录 Dirty ImageDirty BeamClean ImagePoint Spread Function(PSF)Station Beam关系Dirty Image 脏图像(Dirty Image): 脏图像是在射电干涉测量中观测到的图像,它是真实图像和仪器效应(包括PSF和站波束)的组合结果。 在射电干涉测量中,观测到的结果被称为“脏图像…

KamaCoder(四)

题目来源于&#xff1a;卡码网KamaCoder 题解来源于&#xff1a;GitHub - youngyangyang04/kamacoder-solutions: 卡码网题解全集 目录 路径简化 题目描述 输入 输出 样例输入 样例输出 汽水瓶子换饮料 题目描述 输入 输出 样例输入 样例输出 开发商购买土地 …

3、DVWA——CSRF

文章目录 一、CSRF概述二、low2.1 通关思路2.2 源码分析 三、medium3.1 通关思路3.2 源码分析 四、high4.1 通关思路4.2 源码分析 五、impossible 一、CSRF概述 CSRF全称为跨站请求伪造&#xff08;Cross-site request forgery&#xff09;&#xff0c;是一种网络攻击方式&…

Excel_VBA程序文件的加密及解密说明

VBA应用技巧及疑难解答 Excel_VBA程序文件的加密及解密 在您看到这个文档的时候&#xff0c;请和我一起念&#xff1a;“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”&#xff0c;为自己所得而感恩&#xff0c;为付出者赞叹功德。 本不想分享之一技术&#xff0c;但众多学…