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

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

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

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

**步骤:**

  1. 编译你的 Go 程序:

```bash

复制代码
   go build -o myapp main.go

```

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

```bash

复制代码
   nohup ./myapp > myapp.log 2>&1 &

```

  • `nohup`:使程序忽略挂起信号,即使关闭终端也不会中断程序。

  • `./myapp`:你编译好的 Go 程序。

  • `> myapp.log 2>&1`:将程序的标准输出和标准错误输出重定向到 `myapp.log` 文件中。

  • `&`:将程序放到后台执行。

  1. 查看程序日志:

```bash

复制代码
   tail -f myapp.log

```

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

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

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

**步骤:**

  1. 编译你的 Go 程序:

```bash

复制代码
   go build -o myapp main.go

```

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

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

```bash

复制代码
   sudo nano /etc/systemd/system/myapp.service

```

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

    [Unit]
    Description=My Go Application
    After=network.target

    复制代码
    [Service]
    ExecStart=/path/to/myapp
    WorkingDirectory=/path/to/your/app/directory
    Restart=always
    User=www-data
    Group=www-data
    StandardOutput=append:/var/log/myapp.log
    StandardError=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`:在系统启动时自动启动服务。

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

```bash

复制代码
   sudo systemctl daemon-reload
   sudo systemctl start myapp.service
   sudo systemctl enable myapp.service

```

  1. 查看服务状态:

```bash

复制代码
   sudo systemctl status myapp.service

```

  1. 查看日志:

```bash

复制代码
   sudo journalctl -u myapp.service

journalctl -u classin.service --no-pager

```

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

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

使用 `tmux`:

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

```bash

复制代码
   tmux new-session -s myapp

```

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

```bash

复制代码
   ./myapp

```

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

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

```bash

复制代码
 tmux attach -t myapp

```

使用 `screen`:

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

```bash

复制代码
   screen -S myapp

```

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

```bash

复制代码
   ./myapp

```

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

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

```bash

复制代码
screen -r myapp

```

总结

  • **`nohup`**:适用于简单的后台执行,适合快速启动。

  • **`systemd`**:适用于将 Go 程序作为服务运行,支持自动重启、日志记录等。

  • **`tmux`/`screen`**:适用于需要交互式终端会话的后台运行,方便在后台运行程序时仍然可以查看输出。

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

相关推荐
冷雨夜中漫步5 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴5 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再5 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
JH30736 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919107 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手7 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_7 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934737 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy7 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
invicinble7 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat