最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go項目關閉終端后停止運行的3種實用解決方案

 更新時間:2025年08月28日 09:20:34   作者:網(wǎng)友阿貴  
在Go項目部署過程中,很多開發(fā)者都會遇到一個共性問題:通過終端啟動程序后,一旦關閉終端,程序就會隨之停止運行,本文將介紹3種可靠方案,徹底解決這一問題,確保Go程序在服務器上穩(wěn)定運行,需要的朋友可以參考下

引言

在Go項目部署過程中,很多開發(fā)者都會遇到一個共性問題:通過終端啟動程序后,一旦關閉終端,程序就會隨之停止運行。這本質(zhì)上是因為程序運行在前臺進程中,終端作為父進程被關閉時,子進程會被系統(tǒng)終止。本文將介紹3種可靠方案,徹底解決這一問題,確保Go程序在服務器上穩(wěn)定運行。

一、問題根源:前臺進程與終端的依賴關系

當我們通過./shuha(假設程序名為shuha)直接啟動Go程序時,程序會作為前臺進程運行,其生命周期與終端綁定:

  • 終端關閉時,系統(tǒng)會向關聯(lián)的所有進程發(fā)送SIGHUP(掛起信號)
  • 前臺進程收到該信號后會默認終止運行
  • 這就是為什么關閉終端后程序會停止的核心原因

二、解決方案詳解

方案1:使用nohup命令(最簡單直接)

nohup(no hang up)命令的作用是忽略終端關閉時發(fā)送的SIGHUP信號,讓程序脫離終端獨立運行,同時將輸出日志重定向到文件。

操作步驟:

進入程序目錄

cd /www/wwwroot/auth-shuha-api  # 替換為你的項目路徑

創(chuàng)建日志目錄(可選但推薦)
為避免日志散落在項目根目錄,建議創(chuàng)建專門的日志文件夾:

mkdir -p logs  # 創(chuàng)建logs目錄
chmod 755 logs  # 賦予讀寫權限

后臺啟動程序

nohup ./shuha > logs/run.log 2>&1 &

命令解析:

  • nohup:忽略終端關閉信號
  • ./shuha:啟動Go程序
  • > logs/run.log:將標準輸出(stdout)寫入日志文件
  • 2>&1:將錯誤輸出(stderr)合并到標準輸出,統(tǒng)一寫入日志
  • &:將程序放入后臺運行

驗證程序是否運行

ps -ef | grep shuha  # 查看進程

若輸出包含./shuha,說明程序已在后臺穩(wěn)定運行。

查看實時日志

tail -f logs/run.log  # 實時監(jiān)控日志輸出

停止程序(如需)
先通過ps命令獲取進程ID(PID),再用kill終止:

ps -ef | grep shuha  # 找到進程ID(第二列數(shù)字)
kill -9 12345        # 替換12345為實際PID

方案2:使用screen創(chuàng)建虛擬終端(適合頻繁調(diào)試)

screen是一款終端復用工具,可創(chuàng)建獨立的虛擬終端會話。關閉終端后,會話仍在后臺運行,重新連接終端后可恢復會話繼續(xù)操作。

操作步驟:

安裝screen(首次使用)

CentOS系統(tǒng):

yum install -y screen

Ubuntu/Debian系統(tǒng):

apt-get install -y screen

創(chuàng)建新會話

screen -S go_shuha  # 創(chuàng)建名為go_shuha的會話(名稱可自定義)

執(zhí)行后會進入一個全新的虛擬終端。

啟動程序
在虛擬終端中正常啟動Go程序:

cd /www/wwwroot/auth-shuha-api
./shuha  # 前臺啟動(可直接看到輸出日志)

脫離會話(保持程序運行)
Ctrl + A后再按D(先按Ctrl+A,松開后按D),此時會回到原終端,程序在虛擬會話中繼續(xù)運行。

重新連接會話
關閉終端后,再次登錄服務器,執(zhí)行以下命令恢復會話:

screen -r go_shuha  # 重新進入名為go_shuha的會話

終止程序與會話

  • 在會話中按Ctrl + C終止程序
  • 輸入exit可關閉當前虛擬會話

方案3:使用systemd配置系統(tǒng)服務(最穩(wěn)定,推薦生產(chǎn)環(huán)境)

將Go程序注冊為系統(tǒng)服務,可通過systemctl命令管理,支持開機自啟,是生產(chǎn)環(huán)境的最佳選擇。

操作步驟:

創(chuàng)建服務配置文件

vim /etc/systemd/system/shuha.service  # 用vim編輯服務文件

寫入配置內(nèi)容
i進入編輯模式,粘貼以下內(nèi)容(根據(jù)實際路徑修改):

[Unit]
Description=Auth Shuha API Service  # 服務描述
After=network.target mysql.service  # 依賴網(wǎng)絡和MySQL服務(可選)

[Service]
User=root  # 運行用戶(建議用非root用戶,如www)
WorkingDirectory=/www/wwwroot/auth-shuha-api  # 程序目錄
ExecStart=/www/wwwroot/auth-shuha-api/shuha  # 程序絕對路徑
Restart=always  # 程序崩潰時自動重啟
RestartSec=3  # 重啟間隔3秒
StandardOutput=append:/www/wwwroot/auth-shuha-api/logs/run.log  # 標準輸出日志
StandardError=append:/www/wwwroot/auth-shuha-api/logs/error.log  # 錯誤日志

[Install]
WantedBy=multi-user.target  # 多用戶模式下啟動

Esc后輸入:wq保存退出。

刷新系統(tǒng)服務

systemctl daemon-reload  # 重新加載服務配置

啟動服務

systemctl start shuha  # 啟動服務

設置開機自啟(可選)

systemctl enable shuha  # 開機自動啟動

服務管理常用命令

systemctl status shuha  # 查看服務狀態(tài)
systemctl stop shuha    # 停止服務
systemctl restart shuha # 重啟服務
journalctl -u shuha     # 查看系統(tǒng)日志(包含服務啟動信息)

三、方案對比與選擇建議

方案優(yōu)點缺點適用場景
nohup簡單易用,無需額外配置無開機自啟,管理不夠規(guī)范臨時測試、短期運行
screen支持會話恢復,適合調(diào)試配置稍復雜,不支持開機自啟開發(fā)環(huán)境、需要頻繁交互的場景
systemd穩(wěn)定可靠,支持開機自啟和重啟配置相對復雜生產(chǎn)環(huán)境、長期運行的服務

四、常見問題排查

程序后臺運行后無法訪問

  • 檢查程序是否監(jiān)聽0.0.0.0(而非127.0.0.1),確保外部可訪問
  • 確認服務器防火墻和云安全組已開放程序端口(如8080)

日志文件無內(nèi)容

  • 檢查日志目錄權限是否正確(程序是否有寫入權限)
  • 確認啟動命令中的日志路徑與程序?qū)嶋H輸出路徑一致

systemd服務啟動失敗

  • systemctl status shuha查看具體錯誤
  • 檢查ExecStart路徑是否正確,程序是否有執(zhí)行權限(chmod +x shuha

通過以上方案,可徹底解決Go程序關閉終端后停止運行的問題。根據(jù)實際場景選擇合適的方案,既能保證程序穩(wěn)定運行,又能簡化管理成本。生產(chǎn)環(huán)境優(yōu)先推薦systemd方案,兼顧穩(wěn)定性和可維護性。

以上就是Go項目關閉終端后停止運行的3種實用解決方案的詳細內(nèi)容,更多關于Go關閉終端后停止運行的資料請關注腳本之家其它相關文章!

相關文章

  • 深入解析Go?變量字符串與字符編碼問題

    深入解析Go?變量字符串與字符編碼問題

    Go的字符串是由單個字節(jié)連接起來的,Go語言的字符串的字節(jié)使用UTF-8編碼標識Unicode文本,接下來通過本文給大家介紹下Go變量字符串與字符編碼問題,需要的朋友可以參考下
    2022-04-04
  • Golang中fsnotify包監(jiān)聽文件變化的原理詳解

    Golang中fsnotify包監(jiān)聽文件變化的原理詳解

    Golang提供了一個強大的fsnotify包,它能夠幫助我們輕松實現(xiàn)文件系統(tǒng)的監(jiān)控,本文將深入探討fsnotify包的原理,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • Golang 實現(xiàn)插入排序的方法示例(2種)

    Golang 實現(xiàn)插入排序的方法示例(2種)

    這篇文章主要介紹了Golang 實現(xiàn)插入排序的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 解決golang post文件時Content-Type出現(xiàn)的問題

    解決golang post文件時Content-Type出現(xiàn)的問題

    這篇文章主要介紹了解決golang post文件時Content-Type出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言處理Excel文件的教程詳解

    Go語言處理Excel文件的教程詳解

    在Go語言中,有許多庫和工具可用于處理Excel文件,本文將介紹如何使用Go語言處理Excel文件,包括讀取、寫入和修改Excel文件,需要的小伙伴可以了解下
    2024-01-01
  • Go語言中常用的日期與時間處理方法詳解

    Go語言中常用的日期與時間處理方法詳解

    Go 語言中的日期與時間處理主要通過標準庫 time 包實現(xiàn),它提供了豐富的時間獲取、計算、格式化、解析等功能,適用于定時任務、日志記錄、時間差計算等場景,下面小編就和大家詳細介紹一下吧
    2025-10-10
  • Go 獲取當前運行文件的目錄的多種方法實現(xiàn)

    Go 獲取當前運行文件的目錄的多種方法實現(xiàn)

    在Go語言中獲取當前運行文件目錄有多種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • Golang實現(xiàn)AES對稱加密算法實例詳解

    Golang實現(xiàn)AES對稱加密算法實例詳解

    所謂對稱加密是指在加密和解碼時使用同一密鑰的加密方式,下面這篇文章主要給大家介紹了關于Golang實現(xiàn)AES對稱加密算法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Go語言開發(fā)中redis的使用詳解

    Go語言開發(fā)中redis的使用詳解

    這篇文章主要介紹了Go語言開發(fā)中redis的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • go module構建項目的實現(xiàn)

    go module構建項目的實現(xiàn)

    本文主要介紹了go module構建項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

堆龙德庆县| 永川市| 依兰县| 拜泉县| 丹棱县| 金溪县| 静乐县| 大邑县| 西盟| 乌拉特后旗| 宜兰市| 通化县| 淮滨县| 丹棱县| 青阳县| 秀山| 靖州| 香港 | 临夏市| 全椒县| 会昌县| 东平县| 新余市| 兴国县| 山丹县| 双桥区| 高邮市| 孟连| 赣州市| 兴仁县| 岳阳县| 准格尔旗| 清河县| 五指山市| 夏邑县| 石阡县| 始兴县| 前郭尔| 宜阳县| 牟定县| 卢湾区|