温馨提示×

ubuntu c++如何部署服务

小樊
47
2026-09-29 12:36:43
栏目: 编程语言

在 Ubuntu 上用 C++ 部署服务,通常有两种理解:

  1. 把 C++ 程序编译成可执行文件,并作为后台服务运行
  2. 用 C++ 写一个网络服务(如 HTTP / RPC 服务)并对外提供接口

下面我按「通用部署方式」给你一个完整、实用的方案,适合大多数场景。


一、编写并编译 C++ 服务程序

示例:简单的 C++ 服务(轮询任务)

// main.cpp
#include <iostream>
#include <unistd.h>

int main() {
    while (true) {
        std::cout << "service running..." << std::endl;
        sleep(5);
    }
    return 0;
}

编译:

g++ main.cpp -o myservice

测试运行:

./myservice

二、把 C++ 程序作为系统服务(推荐)

方法 1:使用 systemd(Ubuntu 官方推荐 ✅)

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
Restart=always
User=ubuntu
WorkingDirectory=/usr/local/bin

[Install]
WantedBy=multi-user.target

3. 启动并设置开机自启

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

4. 查看状态 / 日志

systemctl status myservice
journalctl -u myservice -f

✅ 这是生产环境最常用方式


三、如果是网络服务(HTTP / TCP)

常见方案

  • 原生 socket(适合学习)
  • Boost.Asio
  • Pistache / Drogon / Crow(HTTP 框架)
  • gRPC(微服务)

示例(Drogon HTTP 服务)

#include <drogon/drogon.h>

int main() {
    drogon::app().setPort(8080).run();
}

部署方式同上(systemd)


四、用 Docker 部署(进阶推荐)

Dockerfile 示例

FROM ubuntu:22.04

RUN apt update && apt install -y g++
COPY myservice /app/myservice

CMD ["/app/myservice"]

构建运行:

docker build -t myservice .
docker run -d --name myservice myservice

✅ 适合云服务器、微服务


五、常见问题

1. 程序退出?

  • 加 Restart=always
  • 用日志排查(journalctl)

2. 权限问题?

  • 不要用 root 跑服务
  • 用 User=xxx

3. 依赖库?

ldd myservice

六、总结(推荐路线)

✅ 最小可用

C++ 编译 → systemd 服务

✅ 生产环境

C++ + systemd + 日志 + 监控

✅ 现代部署

C++ + Docker + systemd / K8s


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

  • 是 后台任务 还是 网络服务?
  • 是否有 HTTP / 数据库 / 多线程 需求?

我可以直接给你一份可运行的完整示例 + 部署脚本。

0 踩