温馨提示×

如何部署linux c++服务

小樊
40
2026-09-05 05:15:58
栏目: 编程语言

部署一个 Linux 下的 C++ 服务,通常包括编译构建、可执行文件打包、运行方式选择、进程管理、日志与监控、以及生产环境注意事项。下面我按“从开发到上线”的顺序,系统讲一遍。


一、基本流程概览

  1. 编写 C++ 服务代码
  2. 使用构建工具编译(Make / CMake)
  3. 生成可执行文件
  4. 选择运行方式
    • 直接运行
    • systemd 托管(推荐)
    • Docker 容器
  5. 配置日志、端口、环境变量
  6. 启动并监控

二、编译 C++ 服务

1. 简单示例(g++)

// main.cpp
#include <iostream>
int main() {
    while (true) {
        std::cout << "service running..." << std::endl;
        sleep(5);
    }
}

编译:

g++ -O2 -std=c++17 main.cpp -o myservice

2. 使用 CMake(推荐)

cmake_minimum_required(VERSION 3.10)
project(myservice)

set(CMAKE_CXX_STANDARD 17)

add_executable(myservice main.cpp)

构建:

mkdir build && cd build
cmake ..
make

三、运行 C++ 服务

方式一:直接运行(不推荐生产)

./myservice

问题:

  • 终端关闭即退出
  • 无自动重启
  • 无日志管理

方式二:后台运行(简单)

nohup ./myservice > service.log 2>&1 &

查看:

ps aux | grep myservice

四、使用 systemd 部署(强烈推荐)

1. 放置可执行文件

sudo cp myservice /usr/local/bin/

2. 编写 systemd 服务文件

sudo vim /etc/systemd/system/myservice.service

示例:

[Unit]
Description=My C++ Service
After=network.target

[Service]
ExecStart=/usr/local/bin/myservice
WorkingDirectory=/usr/local/bin
Restart=always
User=appuser
Environment=ENV=production

[Install]
WantedBy=multi-user.target

3. 启动服务

sudo systemctl daemon-reload
sudo systemctl enable myservice
sudo systemctl start myservice

4. 查看状态与日志

systemctl status myservice
journalctl -u myservice -f

五、使用 Docker 部署(云原生推荐)

1. Dockerfile 示例

FROM ubuntu:22.04

COPY myservice /app/myservice
WORKDIR /app

CMD ["./myservice"]

2. 构建与运行

docker build -t myservice .
docker run -d --name myservice -p 8080:8080 myservice

六、生产环境注意事项

1. 信号处理(非常重要)

C++ 服务应处理:

  • SIGTERM(优雅退出)
  • SIGINT

示例:

#include <signal.h>
volatile bool running = true;

void handler(int) {
    running = false;
}

signal(SIGTERM, handler);

2. 日志

  • 不要只写 std::cout
  • 使用:
    • spdlog
    • glog
    • 或直接输出到 journald

3. 配置文件

  • JSON / YAML / INI
  • 不要硬编码 IP、端口

4. 权限

  • 不要用 root 运行服务
  • 创建专用用户:
sudo useradd -r -s /bin/false appuser

七、常见 C++ 服务类型

类型 特点
守护进程 systemd
HTTP 服务 基于 libhv / poco / crow
微服务 gRPC / Thrift
后台任务 定时 / 消息队列

八、示例技术栈(推荐)

  • 构建:CMake
  • 日志:spdlog
  • 网络:libhv / asio
  • 部署:systemd / Docker
  • 监控:Prometheus + node_exporter

如果你愿意,可以告诉我:

  • HTTP 服务 / 后台任务 / 微服务?
  • CMake 还是 Make?
  • 部署在 物理机 / 云服务器 / K8s?

我可以直接给你一套可复制的模板

0