优化探针获取 home 目录
This commit is contained in:
1 parent
43780305da
commit
7944fb09dc
3 files changed
+38
-10
No files matched your search
@@ -9,6 +9,7 @@ import (
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/dushixiang/pika/pkg/agent/utils"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
@@ -107,10 +108,7 @@ func DefaultConfig() *Config {
|
||||
|
||||
// GetDefaultConfigPath 获取默认配置文件路径
|
||||
func GetDefaultConfigPath() string {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
homeDir = "."
|
||||
}
|
||||
var homeDir = utils.GetSafeHomeDir()
|
||||
return filepath.Join(homeDir, ".pika", "agent.yaml")
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -6,6 +6,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/dushixiang/pika/pkg/agent/utils"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
@@ -24,12 +25,7 @@ func NewManager() *Manager {
|
||||
// getIDFilePath 获取 ID 文件路径
|
||||
func getIDFilePath() string {
|
||||
// 获取用户主目录
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
// 如果无法获取主目录,使用当前目录
|
||||
homeDir = "."
|
||||
}
|
||||
|
||||
var homeDir = utils.GetSafeHomeDir()
|
||||
// 统一使用 ~/.pika/agent.id
|
||||
return filepath.Join(homeDir, ".pika", "agent.id")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/user"
|
||||
)
|
||||
|
||||
func GetSafeHomeDir() string {
|
||||
// 1. 尝试从环境变量拿(最快,符合大多数 Unix/Windows 惯例)
|
||||
if h, err := os.UserHomeDir(); err == nil && h != "" {
|
||||
return h
|
||||
}
|
||||
|
||||
// 2. 尝试从系统底层数据库拿(绕过环境变量,直接看 /etc/passwd)
|
||||
if u, err := user.Current(); err == nil && u.HomeDir != "" {
|
||||
return u.HomeDir
|
||||
}
|
||||
|
||||
// 3. 特殊环境兜底(针对 OpenWrt/嵌入式等 root 为主的系统)
|
||||
// 如果是 root 权限运行但没设家目录,通常就是 /root
|
||||
if os.Getuid() == 0 {
|
||||
if _, err := os.Stat("/root"); err == nil {
|
||||
return "/root"
|
||||
}
|
||||
}
|
||||
|
||||
// 4. 极端情况兜底:使用当前程序运行目录或临时目录
|
||||
// 保证程序至少能跑起来,而不是直接 panic 或报错退出
|
||||
if pwd, err := os.Getwd(); err == nil {
|
||||
return pwd
|
||||
}
|
||||
|
||||
return "./"
|
||||
}
|
||||
Reference in new issue
Block a user