2017-04-11 248 views
-1

我试图建立在Linux/var/log目录日志文件,但得到许可被拒绝。任何最佳实践,而不必更改目录的所有权?Golang os.Create权限被拒绝

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

从具有足够权限的用户帐户运行程序。 – zerkms

+0

该机器在AWS云中运行,并通过BeanStalk部署了go环境和代码。所以没有最终用户对机器或程序用户的控制。认为有更好的办法。 – Bruce

回答

0

你在那里有一个标准的UNIX权限问题。鉴于该目录的特殊性,您有三种选择:

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

还要注意,systemd可以保存你的标准输出/错误文件,如果你配置它的权利,你可以用journalctl浏览。事实上,让程序愚蠢地将diag打印到stdout/err而不是分叉是最聪明的事情,systemd会为你做所有这些事情(这样,你可以专注于你的程序的功能,而不是重新发明轮子)守护进程和日志记录)。

对于所有的悲伤systemd得到,它实际上在这种使用情况相当不错。

+0

该机器在AWS云中运行,并通过BeanStalk部署了go环境和代码。所以没有最终用户对机器或程序用户的控制。认为有更好的方法。 – Bruce