前言
本篇记录了使用PM2工具在windows下对C++程序进行进程管理和日志管理,主要使用pm2的这两项功能
- pm2工收集程序的控制台输出,并将其记录为日志的功能 ;
- pm2-logrotate具有日志轮换,日志压缩的功能;
主要步骤涉及以下内容:
- nodejs包管理器的安装,
- pm2的安装,
- pm2启动脚本的编写,
- pm2-logrotate的安装,
- windows下日志轮换不生效,
- pm2-logrotate配置文件的修改
未解决的问题: pm2守护C++进程时,没有程序的相应界面,在任务管理器的后台进程中能找到相应的进程,不知道有没有方法可以看到界面.
1.安装nodejs
官方下载链接为:https://nodejs.org/zh-cn/,推荐下载LTS版,安装时候,尽量不要安装在系统盘 , [如果下载较慢,可下载其他网站上现成的] 下载后直接进行安装即可; 安装后在命令行中,输入npm应该有相应的参数显示,如下图所示
至此,nodejs的包管理器安装成功.
2.安装pm2
使用上一步安装的nodejs包管理器安装pm2,执行以下命令:
npm install pm2 -g
npm install pm2-windows-startup -g
pm2-startup install
验证是否安装成功,执行:
pm2 -v
3.pm2启动脚本的编写
我的脚本比较简单,命名为myTest.config.js,这个后缀是官方推荐,目前只有守护进程的功能:
module.exports = {
apps : [
{
name: "xxxapp",
script : "D:\\LocoPlatform\\LocoPlatform.exe",
},
{
name: "XXX_App1",
script : "C:\\Users\\Administrator\\Desktop\\timu\\XXX123.exe",
}
]
}
在这里由脚本守护了两个进程. 其他可能用到的命令:
pm2 stop xxxapp//停止进程
pm2 delete xxxapp//从管理中删除进程
4.pm2-logrotate的安装
在命令行执行以下命令,进行pm2-logrotate的安装:
pm2 install pm2-logrotate
由于pm2-logrotate在windows下的日志轮换参数不生效,需要对源代码进行如下更改 找到C:\Users\Administrator.pm2\modules\pm2-logrotate\node_modules\pm2-logrotate\app.js(我的时在这个路径) 将第65行改为下图即可,原因应该时之前的路径分隔符时linux下的,不支持windows:
function delete_old(file) {
if (file === "/dev/null") return;
var fileBaseName = file.substr(0, file.length - 4).split(path.sep).pop() + "__";
5.pm2-logrotate配置文件的修改
windows下pm2-logrotate配置的修改,有的命令会执行不生效,因此尽量不使用命令行设置,打开C:\Users\Administrator.pm2\module_conf.json 修改配置文件如下:
{
"pm2-logrotate": {
"max_size": "10K"
"retain": 5,
"compress": true,
"dateFormat": "YYYY-MM-DD_HH-mm-ss",
"workerInterval": "5",
"rotateInterval": "0 * * * * ? ",
"rotateModule": true
},
"module-db-v2": {
"pm2-logrotate": {}
}
}
我理解的日志检测逻辑和分割逻辑为:
- pm2-logrotate工具会每隔[workerInterval]的时间间隔,去检测日志的大小,若大于[max_size],就会将日志分割;
- 当系统时间,满足[rotateInterval],也会强制进行日志分割
- 当日志的数量大于[retain],就会删除旧的日志,ps:脚本中retain参数应该像workerInterval需增加引号,但是我没有加引号也正常使用了;
其他参数: compress:日志是否压缩; dateFormat:日志分割时,日志后缀命名增加的时间格式 rotateModule:是否对pm2的其他模块的日志也使用这样的配置 rotateInterval参数满足cron时间表达式的写法
其他的命令:
pm2 restart pm2-logrotate//修改配置文件后,要从pm2中删除应用,并重启日志管理应用,才能生效
6.程序守护及自动启动
编写bat脚本如下,拉起之前写的pm2进程启动脚本,并将其放在windwos的自启动目录下:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
@echo off
start cmd.exe /k "pm2 start C:\Users\Administrator\Desktop\timu\myTest.config.js"
Pause
日志的默认生成目录为:
C:\Users\Administrator\.pm2\logs
总结
pm2进行windows进程管理主要的坑就是日志轮换中搜索得比较久. pm2-logrotate修改配置文件后,要从pm2中删除应用(即使用pm2 delete xxx命令),并重启日志管理应用,才能生效
|