magic/cmd/nginx/nginx.go
2026-03-28 19:25:12 +08:00

101 lines
2.5 KiB
Go

package nginx
import (
"context"
"fmt"
"os"
"os/exec"
"strings"
"gitea.micah.wiki/pandora/naive/pkg/filex"
"gitea.micah.wiki/pandora/magic/config"
"gitea.micah.wiki/pandora/magic/pkg/loggerx"
)
func Create(ctx context.Context, current *config.Nginx) error {
file := fmt.Sprintf("%s/%s", current.ConfigPath, current.Domain)
isExist, err := filex.Exists(file)
if err != nil {
loggerx.Nginx().Errorf("config file Exists error, err: %+v", err)
return err
}
if isExist {
err = os.Remove(file)
if err != nil {
loggerx.Nginx().Errorf("config file Remove error, err: %+v", err)
return err
}
}
f, err := filex.CreateIfNotExists(file)
if err != nil {
loggerx.Nginx().Errorf("CreateIfNotExists error, err: %+v", err)
return err
}
defer func() { _ = f.Close() }()
_, err = f.Write([]byte(GetInfo(ctx, current)))
if err != nil {
loggerx.Nginx().Errorf("Write config error, err: %+v", err)
return err
}
if strings.Contains(current.ConfigPath, "sites-available") {
lnFile := fmt.Sprintf("%s/../sites-enabled/%s", current.ConfigPath, current.Domain)
isExist, err = filex.Exists(lnFile)
if err != nil {
loggerx.Nginx().Errorf("ln config file Exists error, err: %+v", err)
return err
}
if isExist {
err = os.Remove(lnFile)
if err != nil {
loggerx.Nginx().Errorf("ln config file Remove error, err: %+v", err)
return err
}
}
cmd := exec.Command("ln", "-s", file, lnFile)
// 执行命令并捕获输出
_, err = cmd.CombinedOutput()
if err != nil {
loggerx.Nginx().Errorf("ln config error, err: %+v", err)
// 若执行命令出错,打印错误信息和命令输出
return err
}
}
return nil
}
func ReStart(_ context.Context) error {
_, err := exec.LookPath("brew")
if err == nil {
// 如果存在brew 则按照 brew运行
cmd := exec.Command("brew", "services", "restart", "nginx")
// 执行命令并捕获输出
output, err := cmd.CombinedOutput()
if err != nil {
// 若执行命令出错,打印错误信息和命令输出
return err
}
fmt.Println(string(output))
return nil
}
cmd := exec.Command("systemctl", "restart", "nginx")
// 执行命令并捕获输出
output, err := cmd.CombinedOutput()
if err == nil {
fmt.Println(string(output))
// 若执行命令出错,打印错误信息和命令输出
return nil
}
cmd = exec.Command("nginx", "-s", "reload")
// 执行命令并捕获输出
output, err = cmd.CombinedOutput()
if err != nil {
// 若执行命令出错,打印错误信息和命令输出
return err
}
fmt.Println(string(output))
return nil
}