使用upstart把nodejs应用封装为系统服务实例

要把一个Node.js应用程序封装为系统服务,可以使用 upstart 工具。 upstart 是 Ubuntu 的默认系统初始化工具之一,负责自动启动、停止和管理系统服务。upstart 将一个应用程序实例化为一个守护进程(也叫做服务),它会自动执行并运行在后台。

下面是使用upstart把nodejs应用封装为系统服务的攻略:

步骤1 - 编写Nodejs应用程序

首先需要编写一个Node.js应用程序。在本例中,我们将使用一个简单的 HTTP 程序作为例子。我们把应用程序保存在 /opt/nodeapp/app.js 和 /opt/nodeapp/package.json 文件里。

/**
 * app.js
 */

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8000, 'localhost');

console.log('Server running at http://localhost:8000/');

{
  "name": "nodeapp",
  "version": "0.0.1",
  "dependencies": {
    "http": "^0.10.0"
  }
}

上面的应用程序创建了一个 HTTP 服务,监听 localhost:8000 端口。每当有请求到达时,就会向客户端发送响应 "Hello World"。

步骤2 - 创建upstart脚本

接下来,需要编写一个upstart脚本,以便 Upstart 启动、停止、重启或查看 Node.js 应用程序。在 Ubuntu 中,upstart 脚本存储在 /etc/init 目录中。我们把应用程序的 upstart 脚本存储在 /etc/init/nodeapp.conf 文件中。

# nodeapp - upstart script for a Node.js application

description "Node.js application"

start on started mountall
stop on shutdown

respawn

chdir /opt/nodeapp

exec /usr/bin/node app.js >> /var/log/nodeapp.log 2>&1

上述 upstart 脚本的含义如下:

  • description:Upstart 脚本的描述信息;
  • start on:表示启动时机,此处表示要在系统挂载所有文件系统后启动 Node.js 应用程序;
  • stop on:表示停止条件,此处表示系统关机时停止 Node.js 应用程序;
  • respawn:表示应用程序异常终止后会自动重启;
  • chdir:表示进程运行的目录;
  • exec:表示要运行的命令,这里是通过 node 命令启动应用程序,同时将输出日志重定向到 /var/log/nodeapp.log 文件中。

步骤3 - 启动Nodejs应用程序

现在,可以启动 Node.js 应用程序了。首先通过 upstart 启动 Node.js 应用程序。由于 upstart 脚本是以系统服务的形式运行,因此会在系统启动时自动启动 Node.js 应用程序。下面是相应的命令:

sudo service nodeapp start

可以使用以下命令查看 Node.js 应用程序的状态:

sudo status nodeapp

输出应该类似于这样:

● nodeapp.service - Node.js application
   Loaded: loaded (/etc/systemd/system/nodeapp.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-04-10 01:05:42 UTC; 7min ago
 Main PID: 2912 (node)
   CGroup: /system.slice/nodeapp.service
           └─2912 /usr/bin/node /opt/nodeapp/app.js

Apr 10 01:05:42 ubuntu2004 systemd[1]: Started Node.js application.
Apr 10 01:05:43 ubuntu2004 node[2912]: Server running at http://localhost:8000/

现在 Node.js 应用程序已经在后台运行了。

步骤4 - 停止Nodejs应用程序

停止 Node.js 应用程序很简单。只需要运行下面的命令:

sudo service nodeapp stop

应用程序将从后台进程中终止。可以通过以下命令检查后台进程是否已停止运行:

pgrep node

这个命令应该不会返回任何值,或者只返回 init 进程的 pid。

以上就是使用upstart把nodejs应用封装为系统服务实例的完整攻略,你可以根据上述步骤尝试自己的应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用upstart把nodejs应用封装为系统服务实例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 一文带你了解前端包管理工具npm、yarn和pnpm

    一文带你了解前端包管理工具npm、yarn和pnpm 前言 前端包管理工具是前端开发中必不可少的工具之一,它可以帮助我们快速便捷地安装、升级、管理前端项目中的各种依赖包。本文主要介绍三种最常用的前端包管理工具npm、yarn和pnpm。 npm npm全称为Node Package Manager,是由Node.js官方提供的包管理工具。npm的特点为: 可…

    node js 2023年6月8日
    00
  • 基于JS实现一个小型编译器

    以下是基于JS实现一个小型编译器的完整攻略,主要分为以下几个步骤: 1. 定义语法规则 在实现编译器前,我们需要定义一套自己的语法规则。在本次示例中,我们定义一个类似于计算器的语法规则,包含四则运算、括号和变量赋值等功能。 program ::= statement* statement ::= expression | assignment express…

    node js 2023年6月8日
    00
  • 基于node的tcp客户端和服务端的简单通信

    下面是关于基于node的TCP客户端和服务端的简单通信的攻略: 一、 学习TCP网络协议和socket 在学习TCP客户端和服务端通信前,需要先了解TCP网络协议和socket编程。TCP/IP(Transmission Control Protocol/Internet Protocol)网络协议是Internet网络的基础协议,它规定了网络通信中数据的传…

    node js 2023年6月8日
    00
  • express搭建的nodejs项目使用webpack进行压缩打包

    下面我将详细讲解一下使用Webpack进行打包压缩的完整攻略: 确认前置环境 在进行Webpack的安装和使用之前,首先确认一下系统中是否已经安装好Node.js。如果没有安装,可以到官网上下载对应系统的安装文件,然后按照步骤进行安装。Node.js的安装完成之后,可以在命令行中输入node -v来验证一下是否已经安装好。 安装Webpack 在Node.j…

    node js 2023年6月8日
    00
  • 重学 JS:为啥 await 不能用在 forEach 中详解

    当我们使用 async/await 来处理异步函数时,有可能会遇到在 forEach 循环中使用 await 语句,导致 await 处理不完整的问题,这是因为 forEach 循环的特殊性导致的。 问题 forEach 循环是 JavaScript 提供的一种遍历数组的方式,常用于对数组中的每一项进行操作,语法如下: array.forEach(callb…

    node js 2023年6月8日
    00
  • nodejs结合Socket.IO实现的即时通讯功能详解

    Node.js结合Socket.IO实现的即时通讯功能详解 什么是Socket.IO Socket.IO 是一个 JavaScript 库,用于实现实时、双向、基于事件的通信。它可在不同的浏览器和操作系统下使用,并与任何服务端 — 不论它是基于 Node.js 的还是不是 — 兼容。它主要用于实现即时通讯功能,例如聊天室、弹幕等。 实现 Socket.I…

    node js 2023年6月8日
    00
  • 如何手动实现一个 JavaScript 模块执行器

    下面我将为你详细讲解”如何手动实现一个JavaScript模块执行器”的攻略。 什么是JavaScript模块执行器 JavaScript模块执行器是用来将JavaScript代码模块化的一种工具。它可以自动处理模块的依赖关系,确保每个模块都会按照正确的顺序加载,并且只会加载一次,从而避免了命名冲突和重复加载的问题。在ES6出现之前,JavaScript模块…

    node js 2023年6月8日
    00
  • 用vue和node写的简易购物车实现

    下面我将为大家介绍用Vue和Node.js写的简易购物车实现的完整攻略。 准备工作 环境要求 Node.js Vue.js 基本的HTML和CSS知识 项目结构 ├── client # 前端代码 │ ├── node_modules # 依赖 │ ├── public # 静态资源 │ ├── src # 源代码 │ ├── .gitignore # gi…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部