Golang os.Create权限被拒绝

时间:2017-04-11 04:51:41

标签: linux file go permission-denied

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

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

1 个答案:

答案 0 :(得分:5)

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

  1. 将该目录的权限更改为更混杂。不好的想法,因为它在安全方面开辟了一堆令人讨厌的蠕虫。
  2. 使用sysV,upstart或systemd运行go程序,以便程序与具有权限的用户(通常是root)一起运行。更好,因为只有一个进程获得升级,您可以获得良好的启动/停止/监视例程以及使用upstart或systemd进行基本的自我修复。实际上,如果你还没有,你可能想要探索其中一种。
  3. 使用go's built-in interface to syslog并配置本地syslogd以将其日志保存到该文件。最好的,因为您只是将日志发送到套接字并让服务为您处理。
  4. 另请注意,如果配置正确,systemd可以将stdout / err保存到文件中,然后可以使用journalctl进行浏览。事实上,让你的程序愚蠢地将diags打印到stdout / err并且不会分叉自己是最聪明的事情,现在systemd为你做了所有这些事情(这样,你可以专注于你的程序做什么而不是重新发明轮子wrt守护进程和日志记录)。

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