2017-04-11 246 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