在 Linux 上用 C++ 部署服务,通常包含:编写服务程序 → 编译 → 配置运行方式 → 守护进程/自启动 → 日志与监控。下面按常见做法一步步说明。
一个最简单的“服务”示例(持续运行):
// server.cpp
#include <iostream>
#include <unistd.h>
int main() {
while (true) {
// 模拟服务逻辑
sleep(5);
std::cout << "service running..." << std::endl;
}
return 0;
}
编译:
g++ server.cpp -o myservice -O2
nohupnohup ./myservice > service.log 2>&1 &
查看进程:
ps aux | grep myservice
⚠️ 缺点:服务器重启不会自动启动
sudo vim /etc/systemd/system/myservice.service
示例内容:
[Unit]
Description=My C++ Service
After=network.target
[Service]
ExecStart=/opt/myservice/myservice
WorkingDirectory=/opt/myservice
User=appuser
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo mkdir -p /opt/myservice
sudo cp myservice /opt/myservice/
sudo useradd -r -s /bin/false appuser
sudo chown -R appuser:appuser /opt/myservice
sudo systemctl daemon-reload
sudo systemctl start myservice
sudo systemctl enable myservice
systemctl status myservice
journalctl -u myservice -f
✅ 这是生产环境最推荐方式
int sock = socket(AF_INET, SOCK_STREAM, 0);
bind(sock, ...);
listen(sock, 128);
部署时记得:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
FROM ubuntu:22.04
COPY myservice /app/myservice
WORKDIR /app
CMD ["./myservice"]
构建运行:
docker build -t myservice .
docker run -d --name myservice myservice
适合:
✅ 使用非 root 用户运行
✅ 日志输出到 stdout(systemd / docker 管理)
✅ 信号处理(SIGTERM 优雅退出)
✅ 配置文件外置
✅ 监控(Prometheus / health check)
我可以给你更具体的方案,比如:
你现在的服务是 什么类型?