在 CentOS 服务器上跑 Go 程序时,很多人真正关心的不是“能不能启动”,而是退出终端、断开 SSH 之后进程会不会跟着停掉。本文按最常见的单文件示例,把编译、后台启动和日志查看这三步拆开说明,同时补上 `nohup` 的工作方式和适用边界,方便你判断这种方式是否适合当前程序。
为什么要用 nohup 在后台运行 Go 程序
在实际开发和运维场景里,Go 程序经常需要长时间驻留运行,比如定时任务、采集服务或简单的守护进程。如果直接在终端里前台执行,当前会话一旦关闭,程序通常也会退出。
nohup 的作用,就是让进程在终端断开后继续运行。配合命令末尾的 &,可以把程序放入后台执行,适合无交互、需要持续运行的服务型程序。
开始前需要准备什么
先确认 Go 环境已经可用
执行前先确保 CentOS 上已经安装好 Go。如果机器上还没有环境,可以到 Go 官网下载安装:
确认源码文件和工作目录
准备好你的 Go 程序,例如保存为 main.go。文件名本身可以调整,但后续编译和执行时要和实际文件对应。
然后打开终端,进入程序所在目录。后面的 go build 和可执行文件启动,都默认基于当前目录进行。
先把 Go 程序编译成可执行文件
对于文中的单文件示例,直接执行下面的编译命令即可:
go build main.go
编译成功后,当前目录下会生成一个可执行文件,例如 main。文中也特别说明,这里针对的是单文件示例;如果你的程序由多个文件组成,实际编译命令可能会有所不同。
顺带一提,Windows 下生成的文件名通常会是 main.exe,但本文场景是 CentOS,因此后续启动命令以 ./main 为准。
如何用 nohup 启动并保持程序不断开
编译完成后,就可以用 nohup 启动程序:

nohup ./main &
这条命令里有两个关键点:
命令末尾的 & 是什么作用
& 表示把进程放到后台运行。也就是说,敲回车后终端会立即返回,你可以继续执行其他命令,或者直接退出当前会话。
nohup.out 会保存什么内容
nohup 会把程序输出自动重定向到当前目录下的 nohup.out 文件。这样即使终端已经关闭,程序输出仍然会被写入文件,便于后续排查运行状态。
启动成功后,即使关闭终端或断开 SSH 连接,程序也会继续在后台运行。
程序启动后,怎么查看运行日志
如果你想持续查看后台程序的输出,可以直接跟踪 nohup.out:

tail -f nohup.out
其中 -f 表示持续跟随文件更新,程序有新输出时,终端会实时滚动显示。
如果只是临时看一下最后几行内容,不需要持续监听,也可以使用:
tail nohup.out
这种方式适合什么程序,有哪些限制
这套方法在 CentOS 上用于后台跑 Go 程序很常见,流程简单,也比较稳定。对于一次编译、长期驻留的服务型任务,nohup 基本够用。
但要注意一个前提:程序最好是无交互的。如果程序启动后需要等待键盘输入,或者依赖当前终端进行交互,nohup 场景下这类输入通常不会按预期工作。因此,它更适合守护进程、服务程序和其他不需要人工实时输入的任务。







