golang调用 pm2

作者: adm 分类: go 发布时间: 2024-10-15

在 Go 中调用 PM2 可以通过执行系统命令来实现。PM2 是一个用于管理 Node.js 进程的工具,通常通过命令行操作。Go 提供了 os/exec 包来执行外部命令,因此可以通过 Go 代码调用 PM2 的相关命令。

以下是一个简单的示例,展示如何在 Go 中调用 PM2 来启动、停止或重启 Node.js 应用。

1. 安装 PM2
确保你的系统已经安装了 PM2。如果没有安装,可以通过以下命令安装:

bash

npm install -g pm2

2. Go 中调用 PM2 的示例代码
go

package main

import (
	"fmt"
	"os/exec"
)

// 调用 PM2 启动一个 Node.js 应用
func startApp(appName string, scriptPath string) error {
	cmd := exec.Command("pm2", "start", scriptPath, "--name", appName)
	output, err := cmd.CombinedOutput()
	if err != nil {
		return fmt.Errorf("failed to start app: %v, output: %s", err, string(output))
	}
	fmt.Println("App started:", string(output))
	return nil
}

// 调用 PM2 停止一个 Node.js 应用
func stopApp(appName string) error {
	cmd := exec.Command("pm2", "stop", appName)
	output, err := cmd.CombinedOutput()
	if err != nil {
		return fmt.Errorf("failed to stop app: %v, output: %s", err, string(output))
	}
	fmt.Println("App stopped:", string(output))
	return nil
}

// 调用 PM2 重启一个 Node.js 应用
func restartApp(appName string) error {
	cmd := exec.Command("pm2", "restart", appName)
	output, err := cmd.CombinedOutput()
	if err != nil {
		return fmt.Errorf("failed to restart app: %v, output: %s", err, string(output))
	}
	fmt.Println("App restarted:", string(output))
	return nil
}

func main() {
	appName := "my-node-app"
	scriptPath := "/path/to/your/node-app.js"

	// 启动应用
	err := startApp(appName, scriptPath)
	if err != nil {
		fmt.Println("Error:", err)
	}

	// 重启应用
	err = restartApp(appName)
	if err != nil {
		fmt.Println("Error:", err)
	}

	// 停止应用
	err = stopApp(appName)
	if err != nil {
		fmt.Println("Error:", err)
	}
}

3. 代码说明

exec.Command: 用于创建执行外部命令的对象。

CombinedOutput: 执行命令并返回标准输出和标准错误。

pm2 start: 启动一个 Node.js 应用。

pm2 stop: 停止一个 Node.js 应用。

pm2 restart: 重启一个 Node.js 应用。

4. 运行代码
将代码保存为 main.go。

运行代码:

bash

go run main.go

5. 其他 PM2 命令
你可以根据需要调用其他 PM2 命令,例如:

查看应用状态:

cmd := exec.Command("pm2", "status")

删除应用:

cmd := exec.Command("pm2", "delete", appName)

查看日志:

cmd := exec.Command("pm2", "logs", appName)

6. 注意事项
确保 PM2 已正确安装,并且可以在命令行中直接运行 pm2 命令。

如果 PM2 安装在非标准路径,需要指定完整路径。

如果 Go 程序运行在 Docker 容器中,确保容器内安装了 PM2。

通过这种方式,你可以在 Go 中轻松调用 PM2 来管理 Node.js 应用。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

银众网