gpt4 book ai didi

linux - Golang os.Create 权限被拒绝

转载 作者:IT王子 更新时间:2023-10-29 02:27:31 24 4
gpt4 key购买 nike

我试图在 linux/var/log 目录上创建一个日志文件,但权限被拒绝。有没有无需更改目录所有权的最佳做法?

f, _ := os.Create("/var/log/go_server.log")
defer f.Close()
log.SetOutput(f)

最佳答案

您遇到的是标准 UNIX 权限问题。鉴于该目录的特殊性质,您有三个选择:

  1. 将该目录的权限更改为更加混杂。坏主意,因为它在安全方面打开了一堆讨厌的蠕虫。
  2. 使用 sysV、upstart 或 systemd 运行 go 程序,以便程序在具有权限的用户(通常是 root)下运行。更好,因为只有一个进程获得升级,并且您可以使用 upstart 或 systemd 获得良好的启动/停止/监控例程和基本的 self 修复。事实上,如果您还没有使用过其中一种,您可能想探索一下。
  3. 使用go's built-in interface to syslog并配置您的本地 syslogd 以将其日志保存到该文件。最好,因为您只是将日志发送到套接字并让服务为您处理。

另请注意,如果您配置正确,systemd 可以将您的 stdout/err 保存到文件中,然后您可以使用 journalctl 浏览。事实上,让你的程序愚蠢地将诊断打印到 stdout/err 而不是 fork 本身是最明智的做法,因为 systemd 为你做了所有这些事情(这样,你可以专注于你的程序所做的事情而不是重新发明轮子 wrt守护进程和日志记录)。

对于 systemd 带来的所有悲伤,它实际上非常擅长这个用例。

关于linux - Golang os.Create 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43337019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com