欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > go 语言zero项目设置后台运行的几种方式

go 语言zero项目设置后台运行的几种方式

2025/5/24 8:17:14 来源:https://blog.csdn.net/qq_33665793/article/details/144433819  浏览:    关键词:go 语言zero项目设置后台运行的几种方式

在 Go 项目中将程序设置为后台运行通常有几种方法。你可以使用 `systemd`、`nohup` 或者将 Go 程序作为服务启动。以下是几种常见的方法,分别适用于不同的场景。

### 1. 使用 `nohup` 命令将 Go 程序后台运行

`nohup` 是一个常用的 Linux 工具,它可以将命令行程序的输出重定向到一个文件,并使得程序在后台运行。这样即使关闭终端,程序也会继续运行。

**步骤:**

1. 编译你的 Go 程序:

   ```bash

   go build -o myapp main.go

46eb05039be540d7ba20e2b5c2eb004e.png
   ```

2. 使用 `nohup` 启动程序并使其后台运行:

   ```bash

   nohup ./myapp > myapp.log 2>&1 &


   ```

   - `nohup`:使程序忽略挂起信号,即使关闭终端也不会中断程序。
   - `./myapp`:你编译好的 Go 程序。
   - `> myapp.log 2>&1`:将程序的标准输出和标准错误输出重定向到 `myapp.log` 文件中。
   - `&`:将程序放到后台执行。

3. 查看程序日志:

   ```bash

   tail -f myapp.log


   ```

这样,`myapp` 将会在后台运行,并且所有输出都会被写入 `myapp.log` 文件。

### 2. 使用 `systemd` 将 Go 程序作为系统服务运行

如果你希望 Go 程序作为后台服务运行并且能够随系统启动、停止和重启,可以将其设置为 `systemd` 服务。`systemd` 是现代 Linux 系统中常用的系统和服务管理工具。

**步骤:**

1. 编译你的 Go 程序:

   ```bash

   go build -o myapp main.go


   ```

2. 创建一个 `systemd` 服务单元文件:

   在 `/etc/systemd/system/` 目录下创建一个名为 `myapp.service` 的文件:

   ```bash

   sudo nano /etc/systemd/system/myapp.service


   ```

3. 在 `myapp.service` 文件中,添加以下内容:   ```ini
 

 [Unit]Description=My Go ApplicationAfter=network.target[Service]ExecStart=/path/to/myappWorkingDirectory=/path/to/your/app/directoryRestart=alwaysUser=www-dataGroup=www-dataStandardOutput=append:/var/log/myapp.logStandardError=append:/var/log/myapp_error.log[Install]WantedBy=multi-user.target


   ```

   - `ExecStart`:指定你的 Go 程序的路径。
   - `WorkingDirectory`:指定程序的工作目录(可以是 Go 程序的所在目录)。
   - `Restart=always`:如果程序崩溃,它会自动重启。
   - `User=www-data` 和 `Group=www-data`:指定运行服务的用户和组(如果你希望该程序作为 `www-data` 用户运行)。
   - `StandardOutput` 和 `StandardError`:将标准输出和错误输出分别写入日志文件。
   - `WantedBy=multi-user.target`:在系统启动时自动启动服务。

a679b3db10dd47ce878c108a251d2f19.png

4. 重新加载 `systemd` 配置并启动服务:

   ```bash

   sudo systemctl daemon-reloadsudo systemctl start myapp.servicesudo systemctl enable myapp.service

de618f1e28944c818bc20867bd3208e0.png
   ```

5. 查看服务状态:

   ```bash

   sudo systemctl status myapp.service

383f38d26d5749b99711cf1c1f03cd3a.png
   ```

6. 查看日志:12d10502f0db4c899f15aac4a2ba8813.png

   ```bash

   sudo journalctl -u myapp.service
journalctl -u classin.service --no-pager

 

bd9492b82d7e4befb7d3c0fe50da0a3c.png

   ```

### 3. 使用 `tmux` 或 `screen` 运行程序

`tmux` 和 `screen` 是两个非常流行的终端多路复用器,允许你在多个虚拟终端中运行程序,并能够将这些程序分离到后台。即使关闭终端,程序仍然会在后台运行。

#### 使用 `tmux`:

1. 启动一个新的 `tmux` 会话:

   ```bash

   tmux new-session -s myapp


   ```

2. 在 `tmux` 会话中启动你的 Go 程序:

   ```bash

   ./myapp


   ```

3. 按 `Ctrl + b`,然后按 `d` 将会话分离,使程序在后台运行。

4. 你可以重新连接到 `tmux` 会话:

   ```bash
 

 tmux attach -t myapp


   ```

#### 使用 `screen`:

1. 启动一个新的 `screen` 会话:

   ```bash

   screen -S myapp


   ```

2. 在 `screen` 会话中启动 Go 程序:

   ```bash

   ./myapp


   ```

3. 按 `Ctrl + a`,然后按 `d` 将会话分离。

4. 重新连接到 `screen` 会话:

   ```bash
   

screen -r myapp


   ```

### 总结

- **`nohup`**:适用于简单的后台执行,适合快速启动。
- **`systemd`**:适用于将 Go 程序作为服务运行,支持自动重启、日志记录等。
- **`tmux`/`screen`**:适用于需要交互式终端会话的后台运行,方便在后台运行程序时仍然可以查看输出。

如果你的程序需要长期运行并能够自动重启,推荐使用 `systemd` 来管理服务。如果只是临时将程序放到后台运行,`nohup` 和 `tmux`/`screen` 都是不错的选择。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词