golang调用 pm2
在 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 应用。