运维工具总结

154 阅读13分钟

ssh

SSH (Secure Shell) 是基于客户端-服务器架构的。具体来说:

  • SSH 客户端 是你用于连接到远程服务器的设备(例如你的 Mac)。
  • SSH 服务器 是你连接到的远程设备(例如 Linux 服务器、云服务器等),它需要运行一个 SSH 服务端来接受连接。

Mac 上的 SSH 客户端

macOS 自带 SSH 客户端,这意味着你可以在终端中使用 ssh 命令连接到远程服务器。你不需要额外安装任何软件即可使用 SSH 客户端。

如何使用 SSH 客户端

  1. 在 Mac 终端中连接到远程服务器

    打开终端,输入如下命令:

    ssh username@hostname_or_ip
    

    例如,要连接到 IP 地址为 192.168.1.100 的服务器,你可以这样做:

    ssh user@192.168.1.100
    

    user 是你在远程服务器上的用户名。

  2. 生成 SSH 密钥对(公钥/私钥)

    如果你希望使用 SSH 密钥来进行无密码登录,可以生成一个密钥对:

    ssh-keygen -t rsa -b 4096
    

生成的公私钥位于~/.ssh/下面的id_rsa(私钥)和id_rsa.pub(公钥)文件中。

然后将生成的公钥(通常位于 ~/.ssh/id_rsa.pub)添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

关于 SSH 的架构

  • SSH 客户端:发起连接的设备(例如 Mac 电脑),负责加密、身份验证和发送命令。
  • SSH 服务器:接受连接的远程设备,运行一个 SSH 服务器(如 OpenSSH),它负责处理客户端请求。

通常来说,macOS 自带的只是 SSH 客户端,如果你需要在 Mac 上运行 SSH 服务器(例如让其他设备连接到你的 Mac),你可以开启 macOS 的远程登录功能,这实际上就是启用了 SSH 服务器

SSH 客户端 配置

SSH客户端配置通常位于用户的家目录中的一个名为.ssh的文件夹内,配置文件名为config。这个文件可以包含各种选项来定制SSH客户端的行为。

客户端配置文件地址:~/.ssh/config

以下是一个简单的config文件示例,其中包含了一些常见的配置选项:

全局配置

Host \*
AddKeysToAgent yes
UseKeychain yes
IdentityFile \~/.ssh/id\_ed25519

针对特定主机的配置

Host example.com
User johndoe
HostName 192.168.1.100
Port 2222
IdentityFile \~/.ssh/id\_ed25519

在这个例子中:

AddKeysToAgent 和 UseKeychain 选项是针对 macOS 用户,它们会自动将SSH密钥添加到密钥链。

IdentityFile 指定了用于认证的私钥文件路径。

User 指定了默认的SSH用户名。

HostName 指定了远程主机的IP地址或域名。

Port 指定了SSH连接使用的端口,默认是22。

请根据您的操作系统和需求调整这些配置。如果不存在config文件,可以在用户的家目录下的.ssh文件夹中创建一个新的文件,并写入上述配置。如果文件夹不存在,您需要先创建它。

如何开启 macOS 上的 SSH 服务器

如果你需要让其他设备连接到你的 Mac,你可以通过以下步骤开启 SSH 服务:

  1. 打开 "系统偏好设置"。
  2. 进入 "共享" 设置。
  3. 勾选 "远程登录" 选项。

这样,你的 Mac 就开启了 SSH 服务器,其他设备可以通过 SSH 连接到它。

ssh进入容器和退出容器

要通过 SSH 一步进入到 Docker 容器或 Kubernetes 容器内部,可以通过以下方法实现:

一步进入 Docker 容器内部

在主机已经开启 SSH 的前提下,可以使用以下步骤:

ssh user@host "docker exec -it <container_name_or_id> /bin/bash"

解释

  • user@host: SSH 登录的用户名和主机地址。
  • docker exec -it: 执行命令进入容器。
  • <container_name_or_id>: 替换为目标容器的名称或 ID。
  • /bin/bash: 进入容器的交互式终端。如果容器没有 /bin/bash,可以用 /bin/sh 替代。

示例

假设主机地址为 192.168.1.100,用户是 root,容器名称为 my-container

ssh root@192.168.1.100 "docker exec -it my-container /bin/bash"

注意

确保目标主机的用户有权限执行 Docker 命令。如果没有权限,需要使用 sudo

ssh root@192.168.1.100 "sudo docker exec -it my-container /bin/bash"

一步进入 Kubernetes 容器内部

对于 Kubernetes,需先定位到对应的 Pod 和容器,然后使用以下方法。

ssh user@host "kubectl exec -it <pod_name> -n <namespace> -- /bin/bash"

解释

  • user@host: SSH 登录的用户名和主机地址。
  • kubectl exec -it: 执行命令进入 Kubernetes 的容器。
  • <pod_name>: 替换为目标 Pod 的名称。
  • <namespace>: 替换为 Pod 所在的命名空间。
  • /bin/bash: 进入容器的交互式终端。如果容器没有 /bin/bash,可以用 /bin/sh 替代。

示例

假设主机地址为 192.168.1.100,用户是 root,Pod 名为 my-pod,命名空间是 default

ssh root@192.168.1.100 "kubectl exec -it my-pod -n default -- /bin/bash"

定位到容器内部

如果一个 Pod 中有多个容器,可以指定容器名:

ssh root@192.168.1.100 "kubectl exec -it my-pod -n default -c <container_name> -- /bin/bash"

注意

  1. 确保 Kubernetes 配置文件(~/.kube/config)已经设置正确,且用户有权限执行 kubectl 命令。
  2. 如果需要切换上下文,可以在命令前加上 kubectl config use-context <context_name>

快捷脚本

可以编写一个脚本来简化操作。例如:

Docker 快捷脚本

ssh root@192.168.1.100 "docker ps -q --filter name=my-container | xargs docker exec -it /bin/bash"

Kubernetes 快捷脚本

ssh root@192.168.1.100 "kubectl get pod -n default | grep my-pod | awk '{print \$1}' | xargs -I {} kubectl exec -it {} -n default -- /bin/bash"

总结

通过 SSH,可以直接将远程命令嵌入到 docker execkubectl exec 中,快速进入 Docker 或 Kubernetes 容器内部。确保主机配置无误,拥有相应权限。

容器退出

通过以上方式进入容器后,当你执行 exit 时的行为取决于连接方式和容器退出后的处理逻辑:

当你通过以下命令进入 Docker 容器:

ssh user@host "docker exec -it <container_name> /bin/bash"

或者,当你通过以下命令进入 Kubernetes 容器:

ssh user@host "kubectl exec -it <pod_name> -n <namespace> -- /bin/bash"

执行 exit 后会直接退出 SSH 连接,回到本地终端。

这是因为整个命令链条是由 SSH 一次性执行的,退出容器相当于终止了 SSH 会话。

exit退回到主机终端,必须先进入远程主机,然后进入容器, 这样,exit 容器后会回到主机终端,而不是直接退出 SSH 会话。

Linux指令

进程管理

1. 查看进程

ps 命令

  • 基本用法:查看当前用户的进程。

    ps
    
  • 查看所有进程(包括其他用户的进程):

    ps -ef
    
  • 查看某个用户的进程:

    ps -u <username>
    
  • 查看进程树(进程的父子关系):

    ps -ejH
    
  • 查看指定进程详细信息(包括内存、CPU 使用等):

    ps aux | grep <process_name>
    

例子:

ps -aux # 显示所有进程的详细列表
ps -aux | grep [process_name] # 显示所有进程的详细列表,并通过grep进行过滤
ps -ejH # 以树状结构显示进程
ps -ejH | grep [process_name] # 以树状结构显示特定进程的信息

top 命令

  • 基本用法:实时查看进程信息,CPU 和内存使用率。
top
  • 交互式使用:在 top 界面中可以按下 k 来杀死某个进程,按 P 来按 CPU 排序,按 M 来按内存排序。

htop 命令

  • 增强版的 top:提供更友好的界面,并且支持使用鼠标和键盘操作。
htop
  • 安装 htop(如果没有安装):
sudo apt install htop    # Ubuntu/Debian 系统
sudo yum install htop    # CentOS/RHEL 系统

pgrep 命令

  • 根据进程名查找 PID:
pgrep <process_name>

pidof 命令

  • 查找进程的 PID(与 pgrep 类似):
pidof <process_name>

2. 控制进程

kill 命令

  • 杀死进程(通过 PID):
kill <PID>
  • 强制杀死进程(发送 SIGKILL 信号):
kill -9 <PID>
  • 杀死所有指定名称的进程:
killall <process_name>

pkill 命令

  • 通过进程名杀死进程:
pkill <process_name>
  • 发送不同的信号(例如强制终止进程):
pkill -9 <process_name>

xkill 命令

  • 通过图形界面杀死进程(点击进程窗口):
xkill

(需要先安装 x11-utils,可以通过 sudo apt install x11-utils 安装)

kill -l 命令

  • 列出所有信号,查看可用的信号:
kill -l

3. 启动和管理进程

nohup 命令

  • 将命令放入后台执行,并保持命令执行即使退出终端:
nohup <command> &
  • 输出会默认保存在 nohup.out 文件中,除非指定重定向:
nohup <command> > output.log 2>&1 &

disown 命令

  • 从当前 shell 会话中解除对进程的控制,让进程在 shell 退出时继续运行:
<command> &
disown

fg 命令

  • 将后台进程带回前台:
fg %<job_number>
  • 查看后台作业列表:
jobs

bg 命令

  • 将后台进程继续执行(如果进程被暂停):
bg %<job_number>

systemctl 命令(适用于 Systemd 管理的系统)

  • 启动服务:
sudo systemctl start <service_name>
  • 停止服务:
sudo systemctl stop <service_name>
  • 重启服务:
sudo systemctl restart <service_name>
  • 查看服务状态:
sudo systemctl status <service_name>
  • 查看所有服务状态:
sudo systemctl list-units --type=service

4. 查看进程的网络连接

netstat 命令

  • 查看当前所有网络连接(包括监听端口):
netstat -tuln
  • 查看进程和其占用的端口:
netstat -tulnp
  • 查看特定端口的占用情况:
netstat -an | grep :<port_number>

ss 命令

  • 查看当前所有网络连接(ss 是比 netstat 更加高效的命令):
ss -tuln
  • 查看进程的网络连接:
ss -tulnp

5. 查看进程的资源消耗

free 命令

  • 查看内存使用情况:
free -h

vmstat 命令

  • 查看虚拟内存和其他系统状态:
vmstat 1

iostat 命令

  • 查看 CPU 使用率和磁盘 I/O 情况:
iostat

sar 命令

  • 查看 CPU、内存、网络等的历史性能数据:
sar -u 1 3

6. 使用 systemd 管理进程

在 systemd 系统中,很多服务和进程都会作为 systemd 单元管理。常见的命令包括:

  • 查看服务状态:
systemctl status <service_name>
  • 启动服务:
sudo systemctl start <service_name>
  • 停止服务:
sudo systemctl stop <service_name>
  • 重启服务:
sudo systemctl restart <service_name>
  • 查看所有系统服务状态:
sudo systemctl list-units --type=service

总结

  • ps: 查看当前进程的状态。
  • top / htop: 实时监控系统进程和资源。
  • kill / pkill / killall: 用来杀死进程。
  • systemctl: 管理 systemd 服务。
  • ss / netstat: 查看网络连接和端口占用。
  • fg / bg / jobs: 管理后台进程。
  • nohup / disown: 让进程在终端关闭后继续运行。

查看文件

cat

语法: cat [选项] [文件]

功能: 查看目标文件的内容.

常用选项:

  • n 对输出的所有行编号.
  • b 对非空输出行编号.
  • s 不输出多行空行.

查看小文本文件, 使用 cat 命令.

more

cat 命令的主要缺点是其开始运行之后你无法控制后续操作. 为了解决这个问题, 引入 more 命令. more 命令会显示文本文件的内容, 但会在显示每页数据之后暂停下来.

more 命令是一个分页工具, 可以使用 Enter 键逐行向下查看文件内容, 或是使用空格键逐页向下查看文件内容. 结束之后, 按 q 键退出.

但是 more 命令只能向后翻页, 没有办法向前翻页, 为此引入 less 命令. ###less 工具也是对文件或其它输出进行分页显示的工具, 应该说是 linux 正统查看文件内容的工具, 功能极其强大.

less 的用法相较于 more 而言更加的有弹性, 在使用 more 的时候, 我们并没有办法向前翻页, 只能向后翻页. 但若使用了 less 时,就可以使用 [pageup][pagedown] (上下翻页键) 或上下箭头键等按键的功能来前后翻看文件, 更容易用来查看一个文件的内容!

除此之外, 在 less 里面可以拥有更多的搜索功能, 不止可以向下搜索 ( / ), 也可以向上搜索 ( ? ).

语法: less [选项] [文件]

功能: less 与 more 类似, 但使用 less 可以随意浏览文件, 而 more 仅能向后翻页, 却不能向前翻页. 常用选项:

  • -N 显示每行的行号.
  • /字符串 向下搜索"字符串".
  • ?字符串 向上搜索"字符串".
  • n 重复前一个搜索 (与 / 或 ? 有关).
  • N 反向重复前一个搜索 (与 / 或 ? 有关).
  • q quit, 退出 less.

head

head 命令会显示文件开头若干行, 在默认情况下, 它会显示文件前 10 行的文本.\

head 命令有一个非常方便的选项:

  • -n 选项, 该选项可以指定显示最后 n 行(可以省列n,直接用数字替换n)
head -n 3 test.text //显示前3行
// 可以省列n,直接用数字替换n
head -3 test.text

也可以指定显示最后 n 行.

tail

tail 命令会显示文件结尾若干行, 在默认情况下, 它会显示文件最后 10 行的文本.

tail 命令有一个非常方便的选项:

  • -n 选项, 该选项可以指定显示最后 n 行(可以省列n,直接用数字替换n)

  • -f 选项, 该选项允许你在其他进程使用此文件时查看文件的内容. tail 命令会保持活动状态并持续地显示添加到文件中的内容. 这是实时监测系统日志的绝佳方式.

管道

| 被称作管道文件, 是一种内存级文件.

要显示文件的 991 - 1000 行, 又不想创建临时文件, 就可以使用管道.

head -1000 test.text | tail -10 //先取test文件的前1000项,再取这1000项里面的最后10项
// 

编辑文件

vim

vim 中的五种常见模式

5efaa459e4cf47ea892e5e0b11958a55~tplv-k3u1fbpfcp-jj-mark_3024_0_0_0_q75.jpeg

命令模式指令集

vim 可以直接用键盘上 ↑ ↓ ← → 来进行移动, 但更正规的做法是用小写英文字母 h, j, k, l, 分别控制光标左, 下, 上, 右移动一格.

  • 移动光标
    • $ : 移动到光标所在行的 "行尾" (Shift + 4) .
    • ^ : 移动到光标所在行的 "行首" (Shift + 6) .
    • w : 光标跳到 下个单词的开头 .
    • b : 光标回到 上个单词的开头 .
    • gg : 使光标移动到 文本的开头 .
    • G : 使光标移动到 文本的末端 (Shift + g).
    • n + G : 定位光标到 第 n 行行首 (n + Shift + g).
    • Ctrl + b : 屏幕往前 (上) 移动一页.
    • Ctrl + f : 屏幕往后 (下) 移动一页.
    • Ctrl + u : 屏幕往前 (上) 移动半页.
    • Ctrl + d : 屏幕往后 (下) 移动半页.

复制粘贴

  • yw : 将光标所在之处到 当前单词末端 的字符复制到缓冲区中.
  • n + yw: 复制 n 个 单词 到缓冲区.
  • yy: 复制光标 所在行 到缓冲区.
  • n + yy: 复制 n 行 (包括光标所在行) 到缓冲区.
  • p: 将缓冲区内的字符粘贴到 光标所在行的下一行.
  • n + p: 将缓冲区内的字符粘贴到 光标所在行的下一行 这一行为重复 n 次.

删除

  • x: 每按一次 x , 删除光标所在位置的一个字符.
  • n + x: 删除从光标所在字符开始的 n 个字符 (包括光标所在字符本身).
  • dd: 删除光标所在行.
  • n + dd : 删除光标所在行开始向下 n 行 (包括光标所在行).

撤销

  • u: 如果误执行一个命令, 可以马上按下 u, 撤销上一个操作. 按多次 u 可以执行多次复原.
  • Ctrl + r : 撤销的恢复.

替换

  • r: 替换光标所在处的字符.
  • n + r: 对光标字符加之后的共 n 个字符进行批量化替换 (都替换为同一字符).
  • R :替换光标所到之处的字符, 直到按下 Esc 键为止 (也就是替换模式) ( Shift + r ).

大小写切换

  • ~ ( Shift + ~左边的那个字符 )
插入模式指令集

在插入模式下, 可以对代码做增, 删, 修改的操作, 因此不存在指令集. 但是插入模式也被分为好几种, 换言之就是从命令模式按下 [特定键] 即可进入不同插入模式.

  • i: 从光标所在位置开始输入字符.
  • Shift + i: 进入插入模式后使光标快速切换到当前行行首.
  • a: 从光标所在位置的下一个位置开始输入字符.
  • Shift + a: 进入插入模式后使光标快速切换到当前行行尾.
  • o: 新起一行 (光标当前所在行的下一行), 从行首开始输入字符.
  • Shift + o: 新起一行 (光标当前所在行的上一行), 从行首开始输入字符.
末行模式指令集
  • 列出和去除行号
    • :set nonu 去除行号.
    • :set nu 列出行号.
  • 跳到某一行
    • :行号 跳到行号所指定的行.
  • 查找字符
    • /关键字 : 先按 / 键, 再输入想查找的字符, 如果第一次找的字符不是想要的, 可以一直按 n 键会 往后寻找 到最后一个要查找的字符为止.
    • ?关键字 : 先按 ? 键, 再输入想查找的字符, 如果第一次找的字符不是想要的, 可以一直按 n 键会 往前寻找 到最后一个要查找的字符为止.
  • 替换字符
    • %s/替换前的字符串/替换后的字符串/g, 批量替换相同的字符串. %s 可以看成是 C 语言中字符串的格式声明, g 代表 global 整体的.
  • 保存及退出vim
    • q: 直接退出.
    • q!: 强制退出.
    • w: 保存.
    • wq: 保存并退出.
    • wq!: 保存并强制退出.
  • 不退出 vim 进行相关指令操作
    • ! + 指令 相当于在外部执行指令.
  • Press ENTER or type command to continue [按下任意键继续]
  • 多文件分屏编辑文本
    • vs [文件名] 打开多个文件编辑窗口.
    • Ctrl + ww: 切换光标到不同的窗口 (命令模式下的指令).
可视模式指令集

在可视模式下,比较常用的功能是多行注释. 需要配合 [命令模式] 和 [末行模式] 一起使用.

多行注释

  1. Ctrl + v进入可视模式.
  2. 进入可视模式后, 选择要注释的行, 按j往下选择多行.
  3. 然后按下Shift + i进入插入模式, 并在光标所在处输入 // .
  4. 然后按下Esc键, 完成多行注释, 并回到命令模式.

取消多行注释

  1. Ctrl + v进入可视模式.
  2. 按两次l, 使光标向右移动两次, 将两个/都选中.
  3. j键使光标向下移动, 直到选中所有的注释.
  4. d键即可将所有注释删除, 并自动回到命令模式.
替换模式指令集

R 指令(Shift + r) 让你一步到位进入替换模式: 对于需要替换多个字符, 更好的方案是直接进入替换模式. 按下大写的R键, 屏幕左下角出现REPLACE字样, 说明你已经处于替换模式. 此时输入字符可以连续替换光标及其后边的内容.

Tip: 退格键 (Backspace) 的作用

  • 若光标所在字符的左侧字符被替换过, 则使得左侧被替换的字符恢复到原来的字符.
  • 若光标所在字符的左侧字符没有被替换过, 则只是使光标简单的向左移动.

.vimrc文件配置

网络指令

Linux 提供了丰富的网络工具和命令行指令,用于网络配置、监控和故障排查。以下是一些常见的 Linux 网络工具和指令:

基础网络命令

  • ping:测试主机与目标主机之间的连通性。

    ping example.com
    
  • traceroute(或 tracepath):显示数据包到达目标主机的路径。

    traceroute example.com
    
  • ifconfig:显示或配置网络接口(已被 ip 命令替代)。

    ifconfig
    
  • ip:管理网络接口、路由和 IP 地址(代替 ifconfig)。

    ip addr show
    ip route
    
  • hostname:显示或设置系统的主机名。

    hostname
    

连接和端口

  • netstat:显示网络连接、路由表、接口状态(被 ss 替代)。

    netstat -an
    
  • ss:替代 netstat,用于显示 socket 统计信息。

    ss -tuln
    
  • nmap:网络扫描工具,用于发现主机和服务。

    nmap -sP 192.168.1.0/24
    
  • telnet:用于与远程主机建立明文连接。

    telnet example.com 80
    
  • nc(netcat):网络工具,用于端口扫描、传输数据等。

    nc -zv example.com 80
    
  • curl:用于与 HTTP、FTP 等协议进行数据交互。

    curl http://example.com
    
  • wget:下载文件的网络工具。

    wget http://example.com/file.zip
    
  • lsof:是一个强大的工具,它能够列出系统中打开的文件,包括网络端口相关的文件。

    要通过网络端口查找 PID,可以使用

    lsof -i :<port_number>
    

网络管理和诊断

  • route:查看或配置路由表(已被 ip route 替代)。

    route -n
    
  • arp:查看或修改系统的 ARP 表。

    arp -a
    
  • dig:用于查询 DNS 信息。

    dig example.com
    
  • nslookup:查询域名的 DNS 信息(类似 dig)。

    nslookup example.com
    
  • tcpdump:抓包工具,用于捕获和分析网络流量。

    tcpdump -i eth0
    
  • iftop:实时显示网络接口的流量使用情况。

    iftop
    
  • ethtool:显示或修改网络接口的设置。

    ethtool eth0
    
  • mtr:结合 pingtraceroute 功能的网络诊断工具。

    mtr example.com
    

网络服务和监控

  • systemctl:启动、停止或查看网络服务状态(如 NetworkManager)。

    systemctl status NetworkManager
    
  • nload:监视网络流量使用情况的工具。

    nload
    
  • vnstat:用于监控和记录网络流量。

    vnstat -i eth0
    

这些工具和命令能够帮助你配置、管理和诊断 Linux 系统中的网络环境。根据需求不同,可以选择适当的工具进行网络操作。

pm2

pm2常用命令

npm install pm2 -g             全局安装 pm2
pm2 list                       列举所有正在运行的应用
pm2 start app.js               运行应用
pm2 stop app_name              停止应用(通过应用名称)
pm2 stop id                    停止应用(通过应用id)
pm2 stop all                   停止所有应用
pm2 restart app_name           重启应用(通过应用名称)
pm2 restart id                 重启应用(通过应用id)
pm2 restart all                重启所有应用
pm2 delete app_name            删除应用(通过应用名称)
pm2 delete id                  删除应用(通过应用id)
pm2 delete all                 删除所有应用
pm2 describe app_name          获取应用的详细信息(通过应用名称)
pm2 describe id                获取应用的详细信息(通过应用id)
pm2 monit                      显示每个应用的CPU和内存占用情况

pm2日志

PM2 会自动将 stdout(标准输出)和 stderr(标准错误)保存到日志文件中。

当你使用 PM2 启动一个 Node.js 应用时,它会为每个应用程序创建两个默认的日志文件:

  1. out.log: 存储 stdout 日志(标准输出,如 console.logprocess.stdout.write)。
  2. error.log: 存储 stderr 日志(标准错误,如 console.errorprocess.stderr.write)。

如何查看 PM2 日志文件

默认情况下,PM2 会将日志文件保存在 ~/.pm2/logs/ 目录下。你可以通过以下几种方式查看日志:

  1. 查看 PM2 日志路径

    pm2 show <app_name_or_id>
    

    输出中会包含日志文件的路径。

  2. 查看实时日志

    使用以下命令可以实时查看指定应用的日志输出:

    pm2 logs <app_name_or_id>
    

    或者查看所有应用的日志:

    // 查看所有应用的日志
    pm2 logs
    pm2 logs [app-name| id] [--err] [--lines=500]
    // [app-name| id]: 应用名或应用id
    // --err: 只查看错误日志参数
    // --lines=500: 显示最后500行
    
  3. 查看特定日志文件

    你也可以通过常规的 catlesstail 命令查看日志文件,比如:

    tail -f ~/.pm2/logs/app-name-out.log
    tail -f ~/.pm2/logs/app-name-error.log
    

PM2 日志轮转

PM2 支持日志轮转功能,可以防止日志文件变得太大。你可以使用 PM2 自带的 logrotate 模块来自动进行日志文件的切分和归档。

安装 PM2 日志轮转模块:

pm2 install pm2-logrotate

查看和配置日志轮转:

pm2 set pm2-logrotate:max_size 10M  # 当日志文件达到 10M 时轮转
pm2 set pm2-logrotate:retain 30     # 保留最近 30 天的日志

总结

PM2 会自动将 Node.js 应用的标准输出和标准错误记录到文件中,并提供工具让你实时查看、管理和轮转这些日志。