在开发环境中,启动一个koa 应用服务,通常还需要同时启动数据库。比如。Mongodb、mysql 等

如果一直开着数据库服务,在不使用的话,电脑会占一定的性能。然而如果每次手动去启动服务,效率又不高。因此如果我们在执行npm run start启动 koa 应用时,如果可以提前把需要的服务启动起来,那么就会效率高很多。

简单来说就是把我们平时运行的命令写成脚本,在启动时运行即可。

这里以mongodb 为例说明这个过程。

一、mongodb 启动脚本

我们在应用目录下新建脚本文件

/post-process/sh/mongodb.sh

```#!/usr/bin/sh
dbPath=$HOME/Documents/database/mongo-db
#start up mongod service
# 这里把mongodb 服务后台运行,错误输出重定向到 ./logs/mongod.log
mongod --dbpath ${dbPath} > ./logs/mongod.log &
```

二、利用child-process运行shell 脚本

结合nodejs 的 child_process 模块,写一个运行脚本的方法:


// post-process/index.js
const { exec } = require('child_process');
/**
* 执行一个 shell 脚本
* @param {*} shell
*/
const excecShell = (shell) => {
exec(`sh ${shell}`, (err, stdout, stderr) => {
if (err) {
console.log(err)
return true
} else {
console.log(stdout)
}
})
} /**
* 检查依赖,其实就是运行一系列脚本
*/
const dependencyCheck = (shellArray) => {
if (Array.isArray(shellArray)) {
shellArray.map(item => excecShell(item))
} else {
console.log('Illeagal shell queue!')
}
}
module.exports = {
excecShell: excecShell,
dependencyCheck: dependencyCheck
}

三、把检查过程写到config.js 中

还可以把我的执行检查写道config.js 中:


// config/index.js
const fs = require('fs')
const path = require('path')
let scriptPath = path.resolve(path.join('./post-process/sh'))
//console.log(scriptPath) module.exports = appConfig => {
// 省略
...
config = {
preChecksScripts: [
`${scriptPath}/mongodb.sh`
],
}
return config
}

四、app.js 中执行检查过程:


const Koa = require('koa')
const app = new Koa()
const appConfig = require('./config')() // 省略... // 环境检查脚本
const preCheckTool = require('./post-process') // 需要检查的脚本数组
const checkScripts = appConfig.preChecksScripts
preCheckTool.dependencyCheck(checkScripts) // ...

来源:https://segmentfault.com/a/1190000017135577

结合 Shell 对 Koa 应用运行环境检查的更多相关文章

  1. 通过shell快速配置J2EE运行环境

    虽然可以通过已经配置好的docker镜像来快速运行相关环境, 但是 现实往往就是这么残酷+有钱很任性的时候 就是给出了一个装好系统的电脑让配置环境,每次的配置环境变量真的很烦 纯体力活 就简单的写个脚 ...

  2. Java开发和运行环境的搭建

    Java开发需要准备的东西? JDK+Eclipse 其中JDK的意思是Java开发工具包,Eclipse是进行用于做Java程序开发的工具(当然你也可以用记事本什么的去做). 其他开发工具:JCre ...

  3. Linux:Ubuntu下部署Web运行环境

    Linux:Ubuntu下部署Web运行环境 本次博客将会从三部分内容详述Ubuntu系统下Web运行环境的配置: 依次是:FTP服务器的搭建.MYSQL数据库的搭建.JDK的安装等. 参考文章如下: ...

  4. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  5. 使用Docker搭建Java Web运行环境

    这周末体验了一下挺火的Docker技术,记录学习笔记. >Docker是干什么的 Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发 ...

  6. 如何在Mac OS X上安装 Ruby运行环境

    对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境.此安装方法同样适用于产品环境! 系统需求 首先确定操 ...

  7. 9款一键快速搭建PHP运行环境的好工具

    9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1     内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...

  8. PsySH:PHP交互运行环境

    是什么 我们经常会在命令行用到诸如mysql.python等命令,特点是一旦输入后,会进入命令本身的交互运行环境.示例: [root@iZ25vs3mckhZ ~]# python Python 2. ...

  9. Windows 8 IIS中配置PHP运行环境的方法

    在Windows 8 的IIS(8.0)中搭建PHP运行环境: 一:安装IIS服务器 1.进入控制面板>>程序和功能>>打开或关闭Windows 功能,找到Internet信息 ...

随机推荐

  1. Java数据结构——二叉树节点的增删改查、获取深度及最大最小值

    一.查找最大值 // 查找最大值 public static Node maxNode() { Node node = root; Node maxNode = node; while (node ! ...

  2. source insight编辑matlab,不可

    先说结论,我用的source insight版本是4.0x,matlab的语言包用的sourceinght官网提供的matlab.clf.链接如下:https://www.sourceinsight. ...

  3. 小案例-WebSocket实现简易聊天室

    前言 在详解 HTTP系列之一讲到HTTP/2.0 突破了传统的"请求-问答模式"这一局限,实现了服务器主动向客户端传送数据.而本章将通过一种在单个TCP连接上进行全双工通信的协议 ...

  4. 小程序 使用Promise封装request 接口请求

    //httpService.jsconst host = 'https://baidu.com/ceshi' // 接口请求的域名 // get请求使用 json对象转字符串 (formatParam ...

  5. 【pytest】(三) pytest运行多个文件

    1.运行多个测试文件 pytest 会运行 test_ 开头 或者 _test 结尾的文件,在当前目录和子目录中 2. 一个类下的多个用例的运行, pytest会找到 test_ 开头的方法 impo ...

  6. 水仙花数的条件:1.是一个三位数,2.个百千位数字的3次方加起来的和等于当前的三位数。如果,想要完美一点可以在外部加while循环

    #!/usr/bin/env python# -*- coding: utf-8 -*-print("请输入三位数:")num = input()# 定义常量SumNum = 0# ...

  7. npm 进阶命令知多少(一)

    npm命令知多少(一) 前言 作为前端模块化扎展现形式的npm包,已经在前端开发中不可或缺,熟练掌握npm相关内容,也是前端开发者的一门必修课,那么除了npm publish这类常见内容之外,还有哪些 ...

  8. leetcode刷题-88.合并两个有序数组

    题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  9. 干货:不同场景容器内获取客户端源IP的方法

    摘要:客户端和容器服务器之间可能存在多种不同形式的代理服务器,那容器中如何获取到客户端真实的源ip呢? k8s已经成为当今容器化的标准,人们在享受容器带来的高效与便利的同时,也遇到一些烦恼:客户端和容 ...

  10. 再深入一点|binlog和relay-log到底长啥样?

    上一篇mysql面试的文章之后收到不少朋友的意见,希望深入讲讲复制.日志的格式这些,今天,我们就来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构到底是什么样子的. ...