这些后台启动姿势错过可亏大了

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 这些后台启动姿势错过可亏大了

我们做好一些web 应用,不管是NodeJS, Python还是Java最终部署到线上,都是要后台让它一直运行。


好,下面来看看目前常见的一些应用启动方式。


第一种 nohup 启动脚本 &

这种启动是非常常见的,像Java, Python程序也都是打包好,写一个脚本里面启动的 。所以这个有必要掌握。


这个启动的关键是最后面的&符号,它告诉操作系统把这个程序的进程后台挂起。

前面的nohup就会把启动stdout日志输出到nohup.out文件内。

通常会编写一个启动脚本:


#server.js为node服务入口, 把标准输出和错误输出流都输出到server.log日志中。
 nohup node app.js > server.log 2>&1 & 

拿我之前的文章 Promise你把握不住-KOA写接口查库的示例代码

image.png

image.png

Mac通过ps命令可以查到这种后台启动的进程,window可以用tasklist,读者可以自行尝试。

不过这个有个问题,如果我还有另一个NodeJs应用入口程序也是app.js,那么使用ps -ef查看进程的时候,不容易区别是哪个程序了, 就像下面的程序效果一样。

image.png

这种是最直观最常用的。

第二种 Docker容器后台启动

这种方式就是把应用使用docker build构建docker 镜像,使用容器后台启动的方式。


FROM node:12
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "bin/bash", "run.sh" ]

然后使用docker build构建完之后,运行docker -d

#构建镜像
docker build . -t levin/node-web-app
#把镜像装载到docker容器进程后台运行(-d)
docker run -p 58080:8080 -d levin/node-web-app

我们看看效果吧。

image.png

安装参考: https://blog.csdn.net/geeklevin/article/details/112723331

使用:

docker ps
docker logs imageID
docker inspect imageID

这种方式还是挺好的,后台启动还提供了命令查看进程的状态,日志,以及inspect进程内的子系统信息和网络等细节。


如果结合prometheus+Grafana可以制作很精美的监控台。


第三种方式,pm2的方式启动

这种是nodejs挺常见的。主要是把程序委托给pm2(nodejs版的进程管理工具)管理。


安装和使用


npm install -g pm2
#使用
pm2 start app.js
pm2 ls 
pm2 log app
pm2 monit app

官网: https://pm2.keymetrics.io/

看下图,左边为pm2的运行效果,右边为使用pm2启动命令。

可以看到pm2能够对应用进程查看,还可以查看应用日志等。

image.png

甚至能够实时查看程序内存响应情况等, 运行pm2 monitor app(实时监控所以名字是app的应用),效果如下:

image.png

可以看到,pm2来启动nodejs应用几乎无需配置!

当然它也能配置支持其他语言的程序管理。

第四种 supervisor

这种方式在Python应用中很多见,但是它不止支持python应用程序。

安装

pip install supervisor
supervisord -c supervisor.conf

这个配置起来比较复杂,如下:

[supervisord]
nodaemon=true
[supervisorctl]
[program:demo]
directory=/user/mac/nodejs-all/nodejs-api-002-crud
command=/usr/local/bin/node app.js
autostart=true
autorestart=false
startsecs=1
user = mac
stderr_logfile=/tmp/demo_stderr.log 
stdout_logfile=/tmp/demo_stdout.log 
redirect_stderr = true
stdout_logfile_maxbytes = 10MB
stdout_logfile_backups = 5 

image.png

我们看到这个比第一种好了很多,但是多了这个配置文件,新手需要了解学习这个配置,supervisor在python开发的应用很广泛。博主看过多个数据科学的组件背后都使用了这个来进行进程管理。

image.png

更多信息查看:http://supervisord.org


还有更早的systemctl或者window添加服务,然后进行管理的,这里也不多展示了,更supervisord某种程度类似,需要一个conf来定义程序的元信息。


总结

本文只是展示了博主接触过的一些应用启动方式(本质上是一些进程管理工具代理,当然还有其他的应用程序管理),选择上面四种算是比较典型的做法。


相比而言,docker跟pm2更加容易使用。


个人强烈推荐docker,它除了进程管理,更多是提供一个独立的隔离环境,每个应用都打包成精致的系统镜像,只要对方装了docker就能一个应用随处执行。


第一种就简单直观,但是少了很多运维方面的辅助,很适合开发新手慢慢适应使用。

第二种docker需要服务器安装docker,不过装了docker之后,在大型微服务平台容器化管理非常便利。

第三种pm2进程管理,对于NodeJS开发者或者大部分前端开发者来说都是比其他三种更容易上手的。

第四种,如果你是python比较熟悉,也挺推荐的。


其他可能还有类似的进程管理工具,本篇旨在分享几种经典的进程管理工具和比较它们在运维和使用上的感受。


读者也可以自己试着开发一个进程管理工具,但是可以借鉴经典的实现,做一个简单,易学又符合时代需求的工具。


参考链接

https://blog.csdn.net/geeklevin/article/details/117308989

https://blog.csdn.net/geeklevin/article/details/112723331

https://nodejs.org/zh-cn/docs/guides/nodejs-docker-webapp/

http://supervisord.org/

https://www.docker.com/



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
Ubuntu Linux Python
【服务器部署】让程序在服务器后台持续运行
在服务器后台运行项目不方便管理?不会在后台运行项目?快来试试Screen吧
888 0
|
4月前
码栈运行程序报错
摘要: 在执行Taobao.CodeStore模块的代码时,遇到一个进程启动问题。具体发生在`Process.StartWithCreateProcess`方法内,随后调用了`Process.Start`,再经由`ProcessExt.StartProcess`和`NewAppDevelopControl.CompileScript`,最终触发点在UI中间控件`RunControl`的简单按钮点击事件`simpleButton_Click`。问题表现为无法正常启动进程。需查找并修复导致进程启动失败的原因。
32 0
|
10月前
|
人工智能 Cloud Native Devops
也许是时候停止编写详细的操作手册了
也许是时候停止编写详细的操作手册了
53 0
|
编解码 Android开发
分享5款后台收到的推荐最多的软件
最近后台收到好多小伙伴的私信,今天继续推荐五款小工具,都是免费使用的,大家可以去试试看。
104 0
分享5款后台收到的推荐最多的软件
|
Web App开发 小程序 开发者
三分钟创建一个小程序-每天三分钟玩转小程序 1
三分钟创建一个小程序-每天三分钟玩转小程序 1
三分钟创建一个小程序-每天三分钟玩转小程序 1
|
JSON 前端开发 Java
第二篇:吉瑞外卖项目__后台登录功能开发_后台退出功能开发
第二篇:吉瑞外卖项目__后台登录功能开发_后台退出功能开发
408 0
第二篇:吉瑞外卖项目__后台登录功能开发_后台退出功能开发
|
消息中间件 运维 监控
一次 RocketMQ 进程自动退出排查经验分享(实战篇)
一次 RocketMQ 进程自动退出排查经验分享(实战篇)
一次 RocketMQ 进程自动退出排查经验分享(实战篇)
|
存储 网络安全 开发者
“申诉无门”,开源开发者一怒之下宣布停止开发并关闭所有项目
“在谷歌错误地将 FairEmail 标记为间谍软件而没有给出合理的上诉机会后,我的所有项目都已终止。在解决此问题之前,将不会有进一步的开发和支持。”近日,开源电子邮件客户端 FairEmail 的开发者 Marcel Bokhorst 从谷歌应用商店 Google Play 下架了他所有的应用程序,并宣布将停止开发和维护它们,包括一款受欢迎的开源防火墙应用 Netguard。
152 0
“申诉无门”,开源开发者一怒之下宣布停止开发并关闭所有项目
|
前端开发 JavaScript 数据库