nodejs pm2的日志在哪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs pm2的日志在哪相关的知识,希望对你有一定的参考价值。
参考技术A pm2 或者 forever 抑或自带的nohub服务 pm2:sudo npm install -g pm2pm2 start index.js --name hellopm2 stop hellopm2 restart helloforever:sudo npm install -g foreverforever start index.js...nohub:nohup node index.js > ~/myout.log 2...本回答被提问者采纳物联网NodeJs-5天学习第四天存储篇⑤ ——PM2,node.js应用进程管理器
【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器
面向读者群体
- ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
- ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
- ❤️ 本篇创建记录 2023-03-12 ❤️
- ❤️ 本篇更新记录 2023-03-12 ❤️
技术要求
- 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习
专栏介绍
- 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的物联网web开发,而且能够部署到公网访问。
🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
1. 前言
之前很多情况下我们启动nodejs项目都是通过node命令去启动,但是这种方式一般也不是很稳定安全(如果直接通过node app来启动,如果报错了可能直接停在整个运行)。这时候就需要一个node进程管理工具
(也叫作应用管理,像我们之前用的nodemon
,更偏向于用于开发中服务热加载),可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。
这就是我们本篇需要介绍到的PM2管理器。
在部署 【ESP 保姆级教程】疯狂Node.js服务器篇 ——nodejs应用部署到腾讯云,实现公网访问 中,我们就涉及到PM2的使用。
2. 官方说明
保证你的NodeJS程序 24小时正常运行。
3. 安装PM2
cmd上面输入命令:
npm install pm2 -g
这时候我们就可以用PM2来接管原来的node启动命令了。这里我们随便启动一个原有的NodeJs项目:
pm2安装好后,会自动创建下面目录。
核心几个目录文件信息:
-
logs
包含所有管理中的NodeJs应用的日志信息(这样就方便我们可以看到对应应用的日志信息,方便排查问题)
-
pids
包含所有应用的进程id
通过cmd命令qprocess PID编号
(这里是qprocess 19292) 查看一下:
信息能对上。 -
pm2.log
这里是PM2管理器自己本身的日志信息
-
pm2.pid
这里是PM2管理器自己本身的进程ID
4. PM2常用命令
PM2命令不多,我们来了解一些比较有用的。
4.1 启动命令
最基本的启动命令:
pm2 start app.js
也可以加上一些参数,包括:
--watch
监听应用目录的变化,一旦发生变化,自动重启。--ignore-watch
排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如pm2 start env.js --watch --ignore-watch="node_modules"
不监听node_modules目录变化。--name <app_name>
自定义一个应用名称。查看应用信息的时候可以用到。-o --output <path>
标准输出日志文件的路径。建议不改-e --error <path>
错误输出日志文件的路径。建议不改
完整命令行参数:直接查看官方文档
# Specify an app name
--name <app_name>
# Watch and Restart app when files change
--watch
# Set memory threshold for app reload
--max-memory-restart <200MB>
# Specify log file
--log <log_path>
# Pass extra arguments to the script
-- arg1 arg2 arg3
# Delay between automatic restarts
--restart-delay <delay in ms>
# Prefix logs with time
--time
# Do not auto restart app
--no-autorestart
# Specify cron for forced restart
--cron <cron_pattern>
# Attach to application log
--no-daemon
另外,也可以通过配置yml文件启动。在项目根目录创建一个yml文件:
输入内容:
apps:
- script : index.js
name : 'app'
watch: true
执行命令:
pm2 start app.yml
4.2 重新启动命令
pm2 restart app_name
这里重启一下我们上面刚刚打开的应用,它的名字使用了默认,是index
注意,这个命令只会重启在PM2管理记录里面的应用。如果通过delete命令去操作无法重启成功。
4.3 热重载命令
pm2 reload app_name
这里热重载
一下我们上面刚刚打开的应用,它的名字使用了默认,是index
注意,这个命令只会热重载在PM2管理记录里面的应用。如果通过delete命令去操作无法重启成功。
4.4 停止命令
停止特定的应用。可以先通过pm2 list获取应用的名字
(–name指定的)或者进程id
。
- pm2 stop app_name|app_id
停止所有的应用。
- pm2 stop all
这里我们分别停止单个应用,它的名字使用了默认,是index
以及停止全部应用。
4.5 删除命令
删除特定的应用。可以先通过pm2 list获取应用的名字
(–name指定的)或者进程id
。
- pm2 delete app_name|app_id
停止所有的应用。
- pm2 delete all
对比停止命令,删除命令更加彻底,直接连记录也删除了。
4.6 查看进程运行状态
- pm2 [list|ls|status]
4.4 显示某一个进程的具体信息
- pm2 describe app_id
4.8 显示日志信息
- pm2 logs [–lines n]
4.9 终端监控器
- pm2 monit
4.10 开机自启动
- 保存当前进程状态
pm2 save
- 生成开机自启动脚本
pm2 startup
在win系统上执行这个命令行是有问题的,使用其他库生成自启动脚本。输入命令行:
npm install pm2-windows-startup -g
输入命令行:
pm2-startup install
pm2 将在启动时恢复已保存的进程
- 移除启动脚本
pm2 unstartup
(window系统用pm2-startup uninstall
)
4.11 综合命令
# Fork mode
pm2 start app.js --name my-api # Name process
# Cluster mode
pm2 start app.js -i 0 # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max # Same as above, but deprecated.
pm2 scale app +3 # Scales `app` up by 3 workers
pm2 scale app 2 # Scales `app` up or down to 2 workers total
# Listing
pm2 list # Display all processes status
pm2 jlist # Print process list in raw JSON
pm2 prettylist # Print process list in beautified JSON
pm2 describe 0 # Display all information about a specific process
pm2 monit # Monitor all processes
# Logs
pm2 logs [--raw] # Display all processes logs in streaming
pm2 flush # Empty all log files
pm2 reloadLogs # Reload all logs
# Actions
pm2 stop all # Stop all processes
pm2 restart all # Restart all processes
pm2 reload all # Will 0s downtime reload (for NETWORKED apps)
pm2 stop 0 # Stop specific process id
pm2 restart 0 # Restart specific process id
pm2 delete 0 # Will remove process from pm2 list
pm2 delete all # Will remove all processes from pm2 list
# Misc
pm2 reset <process> # Reset meta data (restarted time...)
pm2 updatePM2 # Update in memory pm2
pm2 ping # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart
这些命令都可以输入到命令行看看效果。
5. PM2配置文件
以上我们都是通过命令行一句句输入,那么肯定会考虑如果有一个配置文件直接执行会不会更好。这就用到了ecosystem.config.js
:文件。
官方文档参考:https://pm2.keymetrics.io/docs/usage/application-declaration/
输入命令
pm2 init simple
会在当前项目根目录下生成一个 ecosystem.config.js 文件。
module.exports =
apps : [
name : "app1",
script : "./index.js"
]
这里就定义应用名字,和执行脚本的启动文件(和我们上面通过yml文件启动配置一样)。接下来就可以用以下命令代替原先的一些操作命令。
# Start all applications
pm2 start ecosystem.config.js
# Stop all
pm2 stop ecosystem.config.js
# Restart all
pm2 restart ecosystem.config.js
# Reload all
pm2 reload ecosystem.config.js
# Delete all
pm2 delete ecosystem.config.js
注意,这里可以和命令行对比。
6. PM2 API方式接入(可选)
上面说的都是通过命令行接入,实际上PM2也支持以NodeJS项目 api的方式接入。喜欢的朋友可以创建一个类似于PM2管理者角色的项目来维护所有项目状态。
参考官方文档:pm2-doc-single-page
const pm2 = require('pm2')
pm2.connect(function(err)
if (err)
console.error(err)
process.exit(2)
pm2.start(
script : 'api.js',
name : 'api'
, function(err, apps)
if (err)
console.error(err)
return pm2.disconnect()
pm2.list((err, list) =>
console.log(err, list)
pm2.restart('api', (err, proc) =>
// Disconnects from PM2
pm2.disconnect()
)
)
)
)
学习的时候我们直接对照命令行来看即可。
7. 总结
本篇主要学习一下 PM2这个 node.js应用进程管理工具,特别是针对比较多NodeJS项目运行时,我们如何做到更加合理去管理运行状态。这里只是简单介绍一下,抛砖引玉,深入的学习还请直接阅读官方文档。
以上是关于nodejs pm2的日志在哪的主要内容,如果未能解决你的问题,请参考以下文章