部署一个 Linux 下的 C++ 服务,通常包括编译构建、可执行文件打包、运行方式选择、进程管理、日志与监控、以及生产环境注意事项。下面我按“从开发到上线”的顺序,系统讲一遍。
// 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
cmake_minimum_required(VERSION 3.10)
project(myservice)
set(CMAKE_CXX_STANDARD 17)
add_executable(myservice main.cpp)
构建:
mkdir build && cd build
cmake ..
make
./myservice
问题:
nohup ./myservice > service.log 2>&1 &
查看:
ps aux | grep myservice
sudo cp myservice /usr/local/bin/
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
sudo systemctl daemon-reload
sudo systemctl enable myservice
sudo systemctl start myservice
systemctl status myservice
journalctl -u myservice -f
FROM ubuntu:22.04
COPY myservice /app/myservice
WORKDIR /app
CMD ["./myservice"]
docker build -t myservice .
docker run -d --name myservice -p 8080:8080 myservice
C++ 服务应处理:
SIGTERM(优雅退出)SIGINT示例:
#include <signal.h>
volatile bool running = true;
void handler(int) {
running = false;
}
signal(SIGTERM, handler);
std::coutsudo useradd -r -s /bin/false appuser
| 类型 | 特点 |
|---|---|
| 守护进程 | systemd |
| HTTP 服务 | 基于 libhv / poco / crow |
| 微服务 | gRPC / Thrift |
| 后台任务 | 定时 / 消息队列 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的模板。