Golang os.Create权限被拒绝

Bru*_*uce 0 linux file go permission-denied

我正在尝试在linux/var/log目录下创建一个日志文件,但是被拒绝了.任何最佳实践,而无需更改目录的所有权?

f, _ := os.Create("/var/log/go_server.log")
defer f.Close()
log.SetOutput(f)
Run Code Online (Sandbox Code Playgroud)

BJ *_*ack 6

你有什么标准的UNIX权限问题.鉴于该目录的特殊性,您有三个选择:

  1. 将该目录的权限更改为更混杂.糟糕的想法,因为它开辟了一个令人讨厌的蠕虫安全方面.
  2. 使用sysV,upstart或systemd运行go程序,以便程序与具有权限的用户(通常是root)一起运行.更好,因为只有一个进程获得升级,您可以获得良好的启动/停止/监视例程以及使用upstart或systemd进行基本的自我修复.实际上,如果你还没有,你可能想要探索其中的一个.
  3. 使用go的syslog内置接口并配置本地syslogd以将其日志保存到该文件.最好,因为您只是将日志发送到套接字并让服务为您处理.

另请注意,如果配置正确,systemd可以将stdout/err保存到文件中,然后可以使用journalctl进行浏览.事实上,让你的程序愚蠢地将diags打印到stdout/err并且不会分叉自己是最聪明的事情,现在systemd为你做了所有这些事情(这样,你可以专注于你的程序做什么而不是重新发明轮子wrt守护进程和日志记录).

对于所有悲伤系统来说,它实际上非常擅长这个用例.