Go語言在Linux中後台執行的問題?

時間 2021-05-07 04:56:41

1樓:黃川

,我自己也對這個包進行了簡單的封裝,你也可以才能考一下.utils/system_service.go at master · coffeehc/utils · GitHub

2樓:

要長久執行的,請遵循系統規範:upstart / sysvinit,搭配其它輔助監控系統。

寫 PID 之類的事情,本來就應該是啟動器做的,不應該放在 Go binary 部分。

如果不是 daemon,只是等不及程式跑完想回頭看進度,用 tmux 是王道。

3樓:yz yu

啊哈哈,前些時再golang群也有人問過這個問題,正好也碰到了,後來一位大牛告訴我最簡單的辦法你寫個bash,然後再裡面./test &然後執行指令碼,這樣關掉terminal,程序也不會退出貌似完全不需要那麼複雜的方法,雖說挺好用,但是一直沒理解原理啊。。。

4樓:Googol Lee

看你要執行的是個長時間的deamon,還是乙個臨時跑起來的程式,希望退出時不被關掉。

如果是deamon需求,建議納入upstart,systemd,supervisor這種程序管理程式的管理,可以自動重啟,還會有日誌輪轉這些功能。這幾個裡面supervisor相對功能最弱,但是配置最簡單;upstart是ubuntu拿來代替initv的程式,配置簡單,功能強大;systemd是redhat用來代替initv的程式,配置略難看,但是功能最多,甚至會做程序資源隔離,保證程式退出時不會出現沒被關閉的程序。

如果只是臨時程式不希望停止,我一般用screen,缺點是console只能儲存一段。使用nohup加重定向也可以。

5樓:

這算不上什麼go專有問題嘛。

當你的terminal退出的時候, 系統會傳送乙個HUP 訊號到所有屬於這個terminal的子程序。

6樓:達達

我們這邊用法:

nohup ./bin/game_server 1> game_server.out 2> game_server.err

nohup這個命令可以把程式放後台執行,順便通過1>和2>把標準輸出和標準錯誤重定向到檔案,這樣程式崩潰時才會有記錄可查,這兩者和程式的日誌最好是分開,混在一起沒辦法判斷輕重緩急。

程序啟動時候記錄下自己的pid:

ifpid

:=syscall

.Getpid

();pid!=1

同時監聽系統發來的kill訊號,在收到kill訊號時做些收尾工作:

signal.Notify(sigTERM, syscall.SIGTERM)

這樣就可以用kill命令關閉服務程序了:

kill `cat game_server.pid`

最初試過自己用系統呼叫實現daemon程序,但是發現和pprof模組有衝突,一pprof就死鎖,不知道是姿勢不對還是早期Go的BUG,反正那時候起就換成nohup形式了,簡單好用。

Docker中可以執行其他非linux系統嗎?比如windows,OS X

同意 孫巨集亮 Docker容器是guest和host共享作業系統的,所以Linux的主機上只有Linux的容器。當然之前Windows上可以跑Linux的Docker容器,是因為底下跑了Linux的VM。好訊息是,Docker很快就要native支援Windows Server 2016了,現在在...

go語言中database下sql中的func Open 是長鏈結還是短鏈結

sql.Open 不會建立連線 只會建立乙個DB例項,同時會建立乙個go程來管理該DB例項的乙個連線池 是長連線,但不是在Open的時候建立 在呼叫Begin 取乙個連線,回滾或者提交得時候歸還。如果你直接使用時Exec 執行,則每次會從連線池裡面取出乙個連線,到Exec執行完畢的時候歸還。可以通過...

ios中的計步工具是如何實現在後台執行的

Galois 計步功能可以有三個層面的實現 硬體層面 系統層面 軟體層面 軟體層面的實現很難保持後台執行,所以最好是系統層面和硬體層面。幸運的是IOS系統內部已經實現了計步功能,因此不需要使用者自己去寫軟體實現。使用者只需要寫好軟體在需要的時候在前台呼叫系統介面檢視計步器的資料即可。計步器的實時執行...