window通过vbs+bat实现自动在后台运行nodejs application

首先,需要明确一点:该技术只适用于Windows环境。

1. 准备vbs和bat文件

在项目根目录下创建两个文件,一个是vbs文件,一个是bat文件。分别命名为run.vbsstart.bat

run.vbs

vbs文件是用来调用bat文件的,它需要同时在后台运行,因此我们需要使用以下的代码:

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & ".\start.bat" & Chr(34), 0
Set WinScriptHost = Nothing

这段代码创建了一个WScript Shell对象,并运行start.bat。注意,这里使用了Chr(34)将文件路径用双引号括起来,以防止路径中出现空格和特殊字符时出现问题。

start.bat

bat文件执行了Node.js应用程序,并将输出重定向到文件(我们可以随时查看日志)。这里我们使用forever,它是一个简单的工具,可以让我们方便地在后台运行Node.js应用。

@echo off
set LOGFILE=logs\server.log
start /b node_modules\.bin\forever start index.js -l %LOGFILE% -o %LOGFILE% -e %LOGFILE%

这个bat文件会执行以下操作:

  1. 定义变量LOGFILE,以指定日志文件的位置
  2. 启动Forever进程并开始监听Node.js应用程序

  3. -l选项指定日志文件的位置

  4. -o选项指定输出日志的位置
  5. -e选项指定错误日志的位置

现在,我们假设该项目目录结构如下:

project/
  run.vbs
  start.bat
  index.js
  node_modules/
  logs/
    server.log

2. 使用vbs+bat运行Node.js应用

我们需要将run.vbs添加到Windows任务计划程序中以便于自动运行。通常可以使用Windows预设任务,但此处进行简单介绍.

手动添加计划任务

  1. 打开“程序和功能”窗口
  2. 点击左侧菜单中的“管理 Windows任务计划”(需要管理员权限)
  3. 在任务计划程序库中,右击空白位置,选择“创建基本任务...”
  4. 输入任务名称,例如“Start Node.js”
  5. 根据需要分配触发器(例如,每次启动Windows或通过计划调度)
  6. 在“操作”选项卡中,选择“启动程序”,并输入以下信息:

  7. 程序或脚本:C:\Windows\System32\cscript.exe

  8. 参数:run.vbs

  9. 单击下一步/完成即可。

使用Node.js模块完成自动添加计划任务

除了手动添加计划任务外,还可以使用node-schedule模块自动添加计划任务。首先,我们需要安装该模块:

npm install node-schedule

然后,我们需要添加以下代码:

const schedule = require('node-schedule')
const path = require('path')

const vbsScriptPath = path.join(__dirname, 'run.vbs')
const taskName = 'Start Node.js'

const scheduleConfig = {
  minute: 0,     // 每小时的0分执行
  hour: '*',     // 每个小时
  dayOfMonth: '*', // 每个月的每天
  month: '*',    // 每个月
  dayOfWeek: '*',   // 每个工作日
}

schedule.scheduleJob(scheduleConfig, function () {
  const { exec } = require('child_process')
  const command = `schtasks /create /ru SYSTEM /tn "${taskName}" /sc ONSTART /tr "${vbsScriptPath}"`

  exec(command, (error, stdout, stderr) => {
    if (error) {
      console.error(`exec error: ${error}`)
      return
    }
    console.log(`stdout: ${stdout}`)
    console.error(`stderr: ${stderr}`)
  })
})

这段代码使用node-schedulescheduleJob()方法来定义计划任务,然后使用child_process模块的exec()方法来执行命令来创建计划任务。

最后,将index.js添加到Windows服务中,以确保Node.js应用程序在后台持久运行即可。

示例说明

我们现在来举一个具体的例子,假设我们正在开发一个在线订餐应用程序。我们使用Node.js编写了服务器端应用程序,并希望在Windows服务器上以后台模式运行它。

像上面那样创建vbs和bat文件,然后通过计划任务或node-schedule模块执行它,即可自动在后台运行Node.js应用程序,并将输出重定向到日志文件。

这种技术可以应用于任何支持Node.js的应用程序,可方便地在Windows环境下自动化运行Node.js应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:window通过vbs+bat实现自动在后台运行nodejs application - Python技术站

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

相关文章

  • node.js中的fs.stat方法使用说明

    当我们在 Node.js 中需要读取、写入或者操作文件时,需要使用 fs 模块。在 fs 模块中,fs.stat() 方法可以用于获取文件的状态,例如文件大小、创建时间、修改时间等信息。本文将详细讲解如何使用 fs.stat() 方法。 fs.stat() 方法介绍 fs.stat() 方法用于获取文件的状态信息,如文件大小、创建时间、修改时间等。它的语法如…

    node js 2023年6月8日
    00
  • 使用Node.js给图片加水印的方法

    我们来详细讲解一下使用Node.js给图片加水印的方法。 环境准备 首先要确保已经安装了Node.js环境,可以在命令行界面输入以下命令检查: node -v 如果有对应的版本号输出,则说明Node.js已经正确安装成功。 安装依赖库 图片处理需要用到ImageMagick库,可以通过以下命令进行安装: npm install imagemagick 安装完…

    node js 2023年6月8日
    00
  • 浅谈Nodejs观察者模式

    浅谈Nodejs观察者模式 什么是观察者模式? 观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并进行相应操作。 在Nodejs中,观察者模式可以用于事件驱动程序设计中,例如Nodejs中的EventEmitter模块。 实现步骤 定义观察者类,用于…

    node js 2023年6月8日
    00
  • 用nodejs访问ActiveX对象,以操作Access数据库为例。

    下面是用nodejs访问ActiveX对象来操作Access数据库的完整攻略: 1. 确认系统支持 在进行这个攻略之前,需要确认你的操作系统支持ActiveX对象的访问。通常来说,Windows系统上的IE浏览器都支持ActiveX。如果你使用的是其他系统或者浏览器,可能需要找到相应的插件或工具才能进行访问。 2. 安装npm包 在nodejs中访问Acti…

    node js 2023年6月8日
    00
  • 基于node.js制作简单爬虫教程

    关于“基于node.js制作简单爬虫教程”的完整攻略,我可以提供如下的步骤和示例。 步骤 安装Node.js:在官网上下载对应的安装包,安装完成。 创建项目:在命令行中使用mkdir创建一个项目目录,使用cd进入该目录,使用npm init创建package.json文件。 安装依赖:使用npm install request cheerio安装reques…

    node js 2023年6月8日
    00
  • Node.js 中如何收集和解析命令行参数

    收集和解析命令行参数是 Node.js 进程中一个常见且重要的任务。Node.js 提供了内置的 process 对象,该对象包含了一个 argv 属性,用于获取用户在命令行中传递的参数列表。本篇攻略将详细介绍 Node.js 中如何收集和解析命令行参数。 获取命令行参数 Node.js 中可以使用 process.argv 属性获取命令行的参数。proce…

    node js 2023年6月8日
    00
  • Angular Renderer (渲染器)的具体使用

    Angular Renderer 是 Angular 的一个基础设施,它是与 DOM 交互的方便的方式。使用 Renderer 可以将组件与底层的 DOM 的具体实现(例如 Angular 所使用的正常 DOM 和 Web Worker 的缺失 DOM)解耦。渲染器可以帮助你在渲染的时候实现跨平台兼容性,例如有一些渲染器支持在 Angular 中使用 Nat…

    node js 2023年6月8日
    00
  • Vue+Node实现的商城用户管理功能示例

    为了讲解“Vue+Node实现的商城用户管理功能示例”的完整攻略,我们需要介绍如下内容: 基本介绍 本示例将通过Vue和Node配合完成一个基于网络的商城用户管理功能,其中前端部分我们使用Vue作为框架,本地服务器采用npm环境,后端服务器采用Node.js完成。 为了使示例更加方便理解,我们将仅实现商城用户管理功能,相关的代码将展示如何实现用户注册、登录、…

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