使用Bash自动监控并重启node服务

278 阅读3分钟

简介

在本教程中,我们将学习如何创建一个Bash脚本来监控特定端口上运行的服务,并在服务停止或不可用时自动重新启动它。这种方法非常有用,可以确保Linux服务器上关键服务的连续运行。我们将使用netcat (nc)来检查端口连接状态,并实现一个简单的循环来持续监控服务。

前提条件

在开始之前,请确保具备以下前提条件:

  1. 一台已经安装和运行要监控的服务的Linux服务器。
  2. 对Bash脚本和Linux命令有基本的了解。

步骤1:创建Bash脚本

在Linux服务器上打开你喜欢的文本编辑器,创建一个名为 keep-run.sh 的新文件。将以下脚本复制并粘贴到文件中:

#!/bin/bash

# 设置服务运行的端口
PORT=7001

# 加载Node.js和其他环境设置
source ~/.profile

# 使用特定的Node.js版本(例如,Node.js 18)
nvm use 18

# 切换到服务所在的目录
cd /服务所在的目录路径

# 定义启动服务的命令
START_COMMAND="pnpm run dev"

while true; do
  # 使用netcat(nc)检查端口连接状态
  nc -z 127.0.0.1 $PORT

  # 获取netcat的退出码
  # 0表示端口可连接,否则表示连接失败
  result=$?

  if [ $result -eq 0 ]; then
    echo "服务在端口 $PORT 上运行正常。"
  else
    echo "服务在端口 $PORT 上未运行,尝试重新启动..."

    # 启动服务
    nohup $START_COMMAND > ./keep-run.log 2>&1 &

    echo "等待服务启动..."
    sleep 5 # 可以根据实际情况调整等待时间
  fi

  # 等待一段时间后再次检查端口连接状态
  sleep 10 # 可以根据实际情况调整检查间隔时间
done

步骤2:自定义脚本

在使用脚本之前,你需要根据你的具体设置进行自定义:

  1. 设置正确的 PORT 值,以匹配你的服务运行的端口号。
  2. 根据需要更新 source ~/.profile 行,设置合适的环境配置文件路径。
  3. cd /服务所在的目录路径 行更改为你的服务所在的实际目录路径。
  4. 根据实际情况调整 START_COMMAND 变量,以匹配启动你的服务的实际命令。

步骤3:使脚本可执行

通过在终端运行以下命令,使脚本可执行:

chmod +x keep-run.sh

步骤4:运行脚本

要开始监控你的服务并在需要时自动重新启动它,只需在终端中运行以下命令:

./keep-run.sh

脚本将持续检查指定端口的连接状态,并在服务未运行时重新启动它。它会显示消息来指示当前状态和任何重新启动尝试。

结论

在本教程中,我们学习了如何创建一个简单的Bash脚本来监控特定端口上运行的服务,并在服务不可用时自动重新启动。通过使用netcat和一个简单的循环,我们可以确保Linux服务器上关键服务的连续运行。你可以根据你的具体服务设置和需求对脚本进行自定义,以维护一个健壮和可靠的服务环境。