重构
This commit is contained in:
parent
a742f096f0
commit
8d063e1330
|
@ -1,94 +0,0 @@
|
||||||
package cmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"acme-mana/src/conf"
|
|
||||||
"acme-mana/src/server"
|
|
||||||
"acme-mana/src/util"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"strconv"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 打印 配置信息
|
|
||||||
func confShow(cmd *cobra.Command, args []string) {
|
|
||||||
tea.Println()
|
|
||||||
confJson, err := json.MarshalIndent(conf.Config(), "", " ")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("序列化配置信息失败:", err)
|
|
||||||
}
|
|
||||||
fmt.Println(string(confJson))
|
|
||||||
}
|
|
||||||
|
|
||||||
func editServer(cmd *cobra.Command, args []string) {
|
|
||||||
server := conf.Config().Server
|
|
||||||
server.Host = util.ReadLine("请输入服务监听地址;", server.Host)
|
|
||||||
server.Port = util.ReadInt("请输入服务监听端口;", strconv.Itoa(server.Port))
|
|
||||||
conf.WriteConfig()
|
|
||||||
fmt.Println("服务监听配置已完成")
|
|
||||||
}
|
|
||||||
|
|
||||||
func serverState(cmd *cobra.Command, args []string) {
|
|
||||||
server.HttpInstance.Status()
|
|
||||||
}
|
|
||||||
func startServer(cmd *cobra.Command, args []string) {
|
|
||||||
server.HttpInstance.Start()
|
|
||||||
}
|
|
||||||
func stopServer(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("stop server")
|
|
||||||
}
|
|
||||||
|
|
||||||
func editTask(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("edit task")
|
|
||||||
}
|
|
||||||
func runTask(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("run task")
|
|
||||||
}
|
|
||||||
|
|
||||||
func statusTask(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("status task")
|
|
||||||
}
|
|
||||||
|
|
||||||
func stopTask(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("stop task")
|
|
||||||
}
|
|
||||||
|
|
||||||
func startTask(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("start task")
|
|
||||||
}
|
|
||||||
func providerDelete(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("delete provider")
|
|
||||||
}
|
|
||||||
|
|
||||||
func providerEdit(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("edit provider")
|
|
||||||
}
|
|
||||||
|
|
||||||
func providerAdd(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("add provider")
|
|
||||||
}
|
|
||||||
|
|
||||||
func providerList(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("list provider")
|
|
||||||
}
|
|
||||||
|
|
||||||
func providerSupport(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("support provider")
|
|
||||||
}
|
|
||||||
|
|
||||||
func editCert(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("edit cert")
|
|
||||||
}
|
|
||||||
|
|
||||||
func certDelete(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("delete cert")
|
|
||||||
}
|
|
||||||
|
|
||||||
func certAdd(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("add cert")
|
|
||||||
}
|
|
||||||
|
|
||||||
func certList(cmd *cobra.Command, args []string) {
|
|
||||||
fmt.Println("list cert")
|
|
||||||
}
|
|
|
@ -63,8 +63,7 @@ package src
|
||||||
//收到停止命令
|
//收到停止命令
|
||||||
//*/
|
//*/
|
||||||
//func onStop() {
|
//func onStop() {
|
||||||
// log.Println("Stopping daemon...")
|
// log.Println("Stopping daemon...")// os.Remove(PidFile)
|
||||||
// os.Remove(PidFile)
|
|
||||||
// log.Println("Remove PID File...")
|
// log.Println("Remove PID File...")
|
||||||
// os.Remove(SocketFile)
|
// os.Remove(SocketFile)
|
||||||
// log.Println("Remove Socket File...")
|
// log.Println("Remove Socket File...")
|
||||||
|
|
532
src/daemon.go
532
src/daemon.go
|
@ -1,269 +1,269 @@
|
||||||
package src
|
package src
|
||||||
|
|
||||||
import (
|
//import (
|
||||||
"encoding/json"
|
// "encoding/json"
|
||||||
"log"
|
// "log"
|
||||||
"net"
|
// "net"
|
||||||
"os"
|
// "os"
|
||||||
"os/exec"
|
// "os/exec"
|
||||||
"path"
|
// "path"
|
||||||
"path/filepath"
|
// "path/filepath"
|
||||||
"strconv"
|
// "strconv"
|
||||||
"syscall"
|
// "syscall"
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
var stdout *os.File
|
//var stdout *os.File
|
||||||
var stderr *os.File
|
//var stderr *os.File
|
||||||
|
//
|
||||||
// Start 启动/*
|
//// Start 启动/*
|
||||||
func Start() {
|
//func Start() {
|
||||||
initLog()
|
// initLog()
|
||||||
args := os.Args
|
// args := os.Args
|
||||||
if len(args) <= 1 {
|
// if len(args) <= 1 {
|
||||||
|
// //daemonStart()
|
||||||
|
// doTask()
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// command := args[1]
|
||||||
|
// switch command {
|
||||||
|
// case "help":
|
||||||
|
// showHelp()
|
||||||
|
// case "block":
|
||||||
|
// doTask()
|
||||||
|
// case "start":
|
||||||
// daemonStart()
|
// daemonStart()
|
||||||
doTask()
|
// case "stop":
|
||||||
return
|
// daemonStop()
|
||||||
}
|
// case "status":
|
||||||
command := args[1]
|
// daemonStatus()
|
||||||
switch command {
|
// case "dump":
|
||||||
case "help":
|
// dumpConfig()
|
||||||
showHelp()
|
// case "domains":
|
||||||
case "block":
|
// showDomains()
|
||||||
doTask()
|
// case "pubkey":
|
||||||
case "start":
|
// showPubkey()
|
||||||
daemonStart()
|
// case "apply":
|
||||||
case "stop":
|
// applyOnce()
|
||||||
daemonStop()
|
// case "-s":
|
||||||
case "status":
|
// daemonCommand()
|
||||||
daemonStatus()
|
// default:
|
||||||
case "dump":
|
// log.Fatalf("Unknown command: %s", command)
|
||||||
dumpConfig()
|
// }
|
||||||
case "domains":
|
//}
|
||||||
showDomains()
|
//
|
||||||
case "pubkey":
|
//// 初始化日志文件
|
||||||
showPubkey()
|
//func initLog() {
|
||||||
case "apply":
|
// pwd, err := os.Getwd()
|
||||||
applyOnce()
|
// if err != nil {
|
||||||
case "-s":
|
// log.Fatalf("Failed to get current working directory: %v", err)
|
||||||
daemonCommand()
|
// }
|
||||||
default:
|
// dir := path.Join(pwd, "log")
|
||||||
log.Fatalf("Unknown command: %s", command)
|
// _, err = os.Stat(dir)
|
||||||
}
|
// if os.IsNotExist(err) {
|
||||||
}
|
// err := os.Mkdir(dir, 0777)
|
||||||
|
// if err != nil {
|
||||||
// 初始化日志文件
|
// log.Fatalf("Failed to create directory: %v", err)
|
||||||
func initLog() {
|
// }
|
||||||
pwd, err := os.Getwd()
|
// }
|
||||||
if err != nil {
|
// outFile, err := os.OpenFile(path.Join(dir, "out.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
||||||
log.Fatalf("Failed to get current working directory: %v", err)
|
// defer outFile.Close()
|
||||||
}
|
// stdout = outFile
|
||||||
dir := path.Join(pwd, "log")
|
//
|
||||||
_, err = os.Stat(dir)
|
// errFile, err := os.OpenFile(path.Join(dir, "err.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
||||||
if os.IsNotExist(err) {
|
// defer stderr.Close()
|
||||||
err := os.Mkdir(dir, 0777)
|
// stderr = errFile
|
||||||
if err != nil {
|
//}
|
||||||
log.Fatalf("Failed to create directory: %v", err)
|
//
|
||||||
}
|
//func showHelp() {
|
||||||
}
|
//}
|
||||||
outFile, err := os.OpenFile(path.Join(dir, "out.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
//
|
||||||
defer outFile.Close()
|
//// 守护进程启动
|
||||||
stdout = outFile
|
//func daemonStart() {
|
||||||
|
// GetAppConfig()
|
||||||
errFile, err := os.OpenFile(path.Join(dir, "err.log"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
// isDaemon := os.Getenv("GO_DAEMON")
|
||||||
defer stderr.Close()
|
// log.Println("Run Daemon, DAEMON Is " + isDaemon)
|
||||||
stderr = errFile
|
// if isDaemon != "1" {
|
||||||
}
|
// // 直接启动
|
||||||
|
// if isRunning() {
|
||||||
func showHelp() {
|
// log.Println("Daemon is already running.")
|
||||||
}
|
// return
|
||||||
|
// }
|
||||||
// 守护进程启动
|
//
|
||||||
func daemonStart() {
|
// workPath, err := os.Executable()
|
||||||
GetAppConfig()
|
// if err != nil {
|
||||||
isDaemon := os.Getenv("GO_DAEMON")
|
// log.Fatalf("Failed to get executable path: %v", err)
|
||||||
log.Println("Run Daemon, DAEMON Is " + isDaemon)
|
// }
|
||||||
if isDaemon != "1" {
|
// cmd := exec.Cmd{
|
||||||
// 直接启动
|
// Path: workPath,
|
||||||
if isRunning() {
|
// Args: os.Args,
|
||||||
log.Println("Daemon is already running.")
|
// Dir: filepath.Dir(workPath),
|
||||||
return
|
// Env: append(os.Environ(), "GO_DAEMON=1"),
|
||||||
}
|
// //Stdin: os.Stdin,
|
||||||
|
// Stdout: stdout,
|
||||||
workPath, err := os.Executable()
|
// Stderr: stderr,
|
||||||
if err != nil {
|
// //Stdin: os.Stdin,
|
||||||
log.Fatalf("Failed to get executable path: %v", err)
|
// //Stdout: os.Stdout,
|
||||||
}
|
// //Stderr: os.Stderr,
|
||||||
cmd := exec.Cmd{
|
// SysProcAttr: &syscall.SysProcAttr{},
|
||||||
Path: workPath,
|
// }
|
||||||
Args: os.Args,
|
//
|
||||||
Dir: filepath.Dir(workPath),
|
// log.Println("Starting daemon...")
|
||||||
Env: append(os.Environ(), "GO_DAEMON=1"),
|
// err = cmd.Start()
|
||||||
//Stdin: os.Stdin,
|
// if err != nil {
|
||||||
Stdout: stdout,
|
// log.Fatalf("Failed to start daemon: %v", err)
|
||||||
Stderr: stderr,
|
// }
|
||||||
//Stdin: os.Stdin,
|
// err = os.WriteFile(PidFile, []byte(strconv.Itoa(cmd.Process.Pid)), 0644)
|
||||||
//Stdout: os.Stdout,
|
// if err != nil {
|
||||||
//Stderr: os.Stderr,
|
// log.Fatalf("Failed to write PID file: %v", err)
|
||||||
SysProcAttr: &syscall.SysProcAttr{},
|
// }
|
||||||
}
|
// log.Printf("Daemon started with PID: %d", cmd.Process.Pid)
|
||||||
|
// os.Exit(0)
|
||||||
log.Println("Starting daemon...")
|
//
|
||||||
err = cmd.Start()
|
// } else {
|
||||||
if err != nil {
|
// // 子进程
|
||||||
log.Fatalf("Failed to start daemon: %v", err)
|
// doTask()
|
||||||
}
|
// }
|
||||||
err = os.WriteFile(PidFile, []byte(strconv.Itoa(cmd.Process.Pid)), 0644)
|
//
|
||||||
if err != nil {
|
//}
|
||||||
log.Fatalf("Failed to write PID file: %v", err)
|
//
|
||||||
}
|
//// 守护进程停止
|
||||||
log.Printf("Daemon started with PID: %d", cmd.Process.Pid)
|
//func daemonStop() {
|
||||||
os.Exit(0)
|
// sendCommand("stop")
|
||||||
|
//}
|
||||||
} else {
|
//
|
||||||
// 子进程
|
//// 守护进程状态
|
||||||
doTask()
|
//func daemonStatus() {
|
||||||
}
|
// if isRunning() {
|
||||||
|
// log.Println("Daemon is running.")
|
||||||
}
|
// } else {
|
||||||
|
// log.Println("Daemon is not running.")
|
||||||
// 守护进程停止
|
// }
|
||||||
func daemonStop() {
|
//}
|
||||||
sendCommand("stop")
|
//
|
||||||
}
|
//// 输出配置文件
|
||||||
|
//func dumpConfig() {
|
||||||
// 守护进程状态
|
// //config, err := json.Marshal(GetAppConfig())
|
||||||
func daemonStatus() {
|
// config, err := json.MarshalIndent(GetAppConfig(), "", " ")
|
||||||
if isRunning() {
|
// if err != nil {
|
||||||
log.Println("Daemon is running.")
|
// log.Fatalf("Failed to marshal config: %v", err)
|
||||||
} else {
|
// }
|
||||||
log.Println("Daemon is not running.")
|
// log.Println(string(config))
|
||||||
}
|
//}
|
||||||
}
|
//
|
||||||
|
//// 手动执行一次证书申请
|
||||||
// 输出配置文件
|
//func applyOnce() {
|
||||||
func dumpConfig() {
|
// if len(os.Args) < 3 {
|
||||||
//config, err := json.Marshal(GetAppConfig())
|
// log.Fatalf("Please enter domain name!")
|
||||||
config, err := json.MarshalIndent(GetAppConfig(), "", " ")
|
// }
|
||||||
if err != nil {
|
// name := os.Args[2]
|
||||||
log.Fatalf("Failed to marshal config: %v", err)
|
// if name == "" {
|
||||||
}
|
// log.Fatalf("No domain specified!")
|
||||||
log.Println(string(config))
|
// }
|
||||||
}
|
// domain := GetAppConfig().FindDomain(name)
|
||||||
|
// if domain == nil {
|
||||||
// 手动执行一次证书申请
|
// log.Fatalf("Domain not found: %s", name)
|
||||||
func applyOnce() {
|
// }
|
||||||
if len(os.Args) < 3 {
|
// Apply(*domain)
|
||||||
log.Fatalf("Please enter domain name!")
|
//}
|
||||||
}
|
//
|
||||||
name := os.Args[2]
|
//// 输出域名列表
|
||||||
if name == "" {
|
//func showDomains() {
|
||||||
log.Fatalf("No domain specified!")
|
// domains := GetAppConfig().Domains
|
||||||
}
|
// // 格式化为json并打印
|
||||||
domain := GetAppConfig().FindDomain(name)
|
// config, err := json.MarshalIndent(domains, "", " ")
|
||||||
if domain == nil {
|
// if err != nil {
|
||||||
log.Fatalf("Domain not found: %s", name)
|
// log.Fatalf("Failed to marshal config: %v", err)
|
||||||
}
|
// }
|
||||||
Apply(*domain)
|
// log.Println(string(config))
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 输出域名列表
|
//// 输出公钥
|
||||||
func showDomains() {
|
//func showPubkey() {
|
||||||
domains := GetAppConfig().Domains
|
// key := GetAppConfig().Encrypt.PubKey
|
||||||
// 格式化为json并打印
|
// log.Println(key)
|
||||||
config, err := json.MarshalIndent(domains, "", " ")
|
//}
|
||||||
if err != nil {
|
//
|
||||||
log.Fatalf("Failed to marshal config: %v", err)
|
//// 守护进程接收命令
|
||||||
}
|
//func daemonCommand() {
|
||||||
log.Println(string(config))
|
// log.Println("Sending command...")
|
||||||
}
|
// command := os.Args[2]
|
||||||
|
// sendCommand(command)
|
||||||
// 输出公钥
|
//
|
||||||
func showPubkey() {
|
//}
|
||||||
key := GetAppConfig().Encrypt.PubKey
|
//
|
||||||
log.Println(key)
|
//// 发送命令
|
||||||
}
|
//func sendCommand(command string) {
|
||||||
|
// conn, err := net.Dial("unix", SocketFile)
|
||||||
// 守护进程接收命令
|
// if err != nil {
|
||||||
func daemonCommand() {
|
// log.Fatalf("Failed to connect to daemon: %v", err)
|
||||||
log.Println("Sending command...")
|
// }
|
||||||
command := os.Args[2]
|
// defer func(conn net.Conn) {
|
||||||
sendCommand(command)
|
// err := conn.Close()
|
||||||
|
// if err != nil {
|
||||||
}
|
// log.Fatalf("Failed to close connection: %v", err)
|
||||||
|
// }
|
||||||
// 发送命令
|
// }(conn)
|
||||||
func sendCommand(command string) {
|
//
|
||||||
conn, err := net.Dial("unix", SocketFile)
|
// _, err = conn.Write([]byte(command))
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
log.Fatalf("Failed to connect to daemon: %v", err)
|
// log.Fatalf("Failed to send command: %v", err)
|
||||||
}
|
// }
|
||||||
defer func(conn net.Conn) {
|
//
|
||||||
err := conn.Close()
|
// log.Printf("Sending command '%s' to daemon with PID: %d", command, 0)
|
||||||
if err != nil {
|
//}
|
||||||
log.Fatalf("Failed to close connection: %v", err)
|
//
|
||||||
}
|
//// 业务进程执行任务
|
||||||
}(conn)
|
//func doTask() {
|
||||||
|
//
|
||||||
_, err = conn.Write([]byte(command))
|
// // 监听主进程下发的指令
|
||||||
if err != nil {
|
// go InitSocket()
|
||||||
log.Fatalf("Failed to send command: %v", err)
|
//
|
||||||
}
|
// // 监听HTTP请求
|
||||||
|
// go InitHttpServer("0.0.0.0", 10000)
|
||||||
log.Printf("Sending command '%s' to daemon with PID: %d", command, 0)
|
//
|
||||||
}
|
// // 自动执行域名证书更新
|
||||||
|
// go AutoRefreshCert()
|
||||||
// 业务进程执行任务
|
//
|
||||||
func doTask() {
|
// // 阻止退出
|
||||||
|
// select {}
|
||||||
// 监听主进程下发的指令
|
//}
|
||||||
go InitSocket()
|
//
|
||||||
|
//// 是否已启动
|
||||||
// 监听HTTP请求
|
//func isRunning() bool {
|
||||||
go InitHttpServer("0.0.0.0", 10000)
|
// log.Println("Checking if daemon is running...")
|
||||||
|
// pid, err := readPID()
|
||||||
// 自动执行域名证书更新
|
// if err != nil {
|
||||||
go AutoRefreshCert()
|
// return false
|
||||||
|
// }
|
||||||
// 阻止退出
|
//
|
||||||
select {}
|
// process, err := os.FindProcess(pid)
|
||||||
}
|
// log.Println("Found process:", process)
|
||||||
|
// if err != nil {
|
||||||
// 是否已启动
|
// log.Println("Failed to find process:", err)
|
||||||
func isRunning() bool {
|
// return false
|
||||||
log.Println("Checking if daemon is running...")
|
// }
|
||||||
pid, err := readPID()
|
// return true
|
||||||
if err != nil {
|
// //err = process.Signal(syscall.Signal(0))
|
||||||
return false
|
// //log.Println("Signal result:", err)
|
||||||
}
|
// //return err == nil
|
||||||
|
//}
|
||||||
process, err := os.FindProcess(pid)
|
//
|
||||||
log.Println("Found process:", process)
|
//// 读取PID文件
|
||||||
if err != nil {
|
//func readPID() (int, error) {
|
||||||
log.Println("Failed to find process:", err)
|
// log.Println("Reading PID file...")
|
||||||
return false
|
// data, err := os.ReadFile(PidFile)
|
||||||
}
|
// if err != nil {
|
||||||
return true
|
// log.Println("Failed to read PID file:", err)
|
||||||
//err = process.Signal(syscall.Signal(0))
|
// return 0, err
|
||||||
//log.Println("Signal result:", err)
|
// }
|
||||||
//return err == nil
|
// log.Println("PID file content:", string(data))
|
||||||
}
|
//
|
||||||
|
// pid, err := strconv.Atoi(string(data))
|
||||||
// 读取PID文件
|
// if err != nil {
|
||||||
func readPID() (int, error) {
|
// log.Println("Failed to parse PID:", err)
|
||||||
log.Println("Reading PID file...")
|
// return 0, err
|
||||||
data, err := os.ReadFile(PidFile)
|
// }
|
||||||
if err != nil {
|
// log.Println("PID:", pid)
|
||||||
log.Println("Failed to read PID file:", err)
|
//
|
||||||
return 0, err
|
// return pid, nil
|
||||||
}
|
//}
|
||||||
log.Println("PID file content:", string(data))
|
|
||||||
|
|
||||||
pid, err := strconv.Atoi(string(data))
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Failed to parse PID:", err)
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
log.Println("PID:", pid)
|
|
||||||
|
|
||||||
return pid, nil
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user