feat: 新增 svc.list/log.list 命令
svc.list 列出所有服务(systemctl/launchctl/sc) log.list 列出可用日志来源(journalctl/日志目录/wevtutil)
This commit is contained in:
@@ -59,6 +59,7 @@ var builtins = map[string]Builtin{
|
||||
"java.run": runJavaRun,
|
||||
"java.run.preview": runJavaPreview,
|
||||
"log.last": runLogLast,
|
||||
"log.list": runLogList,
|
||||
"log.search": runLogSearch,
|
||||
"net.conn": runNetConn,
|
||||
"net.curl": runNetCurl,
|
||||
@@ -77,6 +78,7 @@ var builtins = map[string]Builtin{
|
||||
"proc.wait": runProcWait,
|
||||
"svc.disable": runSvcDisable,
|
||||
"svc.enable": runSvcEnable,
|
||||
"svc.list": runSvcList,
|
||||
"svc.logs": runSvcLogs,
|
||||
"svc.status": runSvcStatus,
|
||||
"sysinfo": runSysInfo,
|
||||
|
||||
@@ -11,6 +11,33 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// runLogList implements `kopsc log list`: list available log sources.
|
||||
func runLogList(ctx context.Context, req BuiltinRequest) error {
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
cmd := exec.CommandContext(ctx, "journalctl", "--list-boots", "--no-pager")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
case "darwin":
|
||||
fmt.Fprintln(req.Stdout, "macOS 日志目录:")
|
||||
fmt.Fprintln(req.Stdout, " /var/log - 系统日志")
|
||||
fmt.Fprintln(req.Stdout, " ~/Library/Logs - 用户日志")
|
||||
fmt.Fprintln(req.Stdout, " /Library/Logs - 全局日志")
|
||||
cmd := exec.CommandContext(ctx, "ls", "-la", "/var/log")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
case "windows":
|
||||
cmd := exec.CommandContext(ctx, "wevtutil", "el")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
default:
|
||||
return fmt.Errorf("不支持的操作系统: %s", runtime.GOOS)
|
||||
}
|
||||
}
|
||||
|
||||
// runLogSearch implements `kopsc log search <keyword>`: search system logs.
|
||||
func runLogSearch(ctx context.Context, req BuiltinRequest) error {
|
||||
opts, err := parseLogSearchArgs(req.Args)
|
||||
|
||||
@@ -10,6 +10,29 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// runSvcList implements `kopsc svc list`: list all services.
|
||||
func runSvcList(ctx context.Context, req BuiltinRequest) error {
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
cmd := exec.CommandContext(ctx, "systemctl", "list-unit-files", "--type=service", "--no-pager")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
case "darwin":
|
||||
cmd := exec.CommandContext(ctx, "launchctl", "list")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
case "windows":
|
||||
cmd := exec.CommandContext(ctx, "sc", "query", "state=", "all")
|
||||
cmd.Stdout = req.Stdout
|
||||
cmd.Stderr = req.Stderr
|
||||
return cmd.Run()
|
||||
default:
|
||||
return fmt.Errorf("不支持的操作系统: %s", runtime.GOOS)
|
||||
}
|
||||
}
|
||||
|
||||
// runSvcStatus implements `kopsc svc status <service>`: show service status
|
||||
// and recent log lines in one step.
|
||||
func runSvcStatus(ctx context.Context, req BuiltinRequest) error {
|
||||
|
||||
Reference in New Issue
Block a user