首先,需要明确一点:该技术只适用于Windows环境。
1. 准备vbs和bat文件
在项目根目录下创建两个文件,一个是vbs文件,一个是bat文件。分别命名为run.vbs
和start.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文件会执行以下操作:
- 定义变量
LOGFILE
,以指定日志文件的位置 -
启动Forever进程并开始监听Node.js应用程序
-
-l
选项指定日志文件的位置 -o
选项指定输出日志的位置-e
选项指定错误日志的位置
现在,我们假设该项目目录结构如下:
project/
run.vbs
start.bat
index.js
node_modules/
logs/
server.log
2. 使用vbs+bat运行Node.js应用
我们需要将run.vbs
添加到Windows任务计划程序中以便于自动运行。通常可以使用Windows预设任务,但此处进行简单介绍.
手动添加计划任务
- 打开“程序和功能”窗口
- 点击左侧菜单中的“管理 Windows任务计划”(需要管理员权限)
- 在任务计划程序库中,右击空白位置,选择“创建基本任务...”
- 输入任务名称,例如“Start Node.js”
- 根据需要分配触发器(例如,每次启动Windows或通过计划调度)
-
在“操作”选项卡中,选择“启动程序”,并输入以下信息:
-
程序或脚本:
C:\Windows\System32\cscript.exe
-
参数:
run.vbs
-
单击下一步/完成即可。
使用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-schedule
的scheduleJob()
方法来定义计划任务,然后使用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技术站