温馨提示×

Linux C++如何配置服务

小樊
41
2026-08-16 00:55:39
栏目: 编程语言

在 Linux 下用 C++ 配置服务,通常指把你的 C++ 程序做成一个 systemd 服务,让它可以 开机自启、后台运行、自动重启。下面按最常见、最推荐的方式一步步说明。


一、准备 C++ 程序

1️⃣ 编译你的程序

g++ main.cpp -o my_service

2️⃣ 放到合适目录(推荐)

sudo cp my_service /usr/local/bin/

二、创建 systemd 服务文件

1️⃣ 新建服务文件

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

2️⃣ 示例配置(最常用)

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

[Service]
Type=simple
ExecStart=/usr/local/bin/my_service
WorkingDirectory=/usr/local/bin
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

参数说明

参数 说明
Type=simple 普通程序(默认)
ExecStart 启动命令
Restart=always 异常退出自动重启
WantedBy 开机启动级别

三、启动和管理服务

1️⃣ 重新加载 systemd

sudo systemctl daemon-reload

2️⃣ 启动服务

sudo systemctl start my_service

3️⃣ 设置开机自启

sudo systemctl enable my_service

4️⃣ 查看状态

sudo systemctl status my_service

5️⃣ 查看日志

journalctl -u my_service -f

四、C++ 程序注意事项(非常重要)

✅ 1. 不要自己 fork(除非你知道在做什么)

Type=simple 时,不要写 daemon 代码

❌ 错误示例:

daemon(0, 0);

✅ 正确示例:

while (true) {
    // do work
    sleep(1);
}

✅ 2. 优雅处理信号(推荐)

#include <signal.h>
#include <iostream>

volatile bool running = true;

void signal_handler(int) {
    running = false;
}

int main() {
    signal(SIGINT, signal_handler);
    signal(SIGTERM, signal_handler);

    while (running) {
        // do work
    }

    std::cout << "Service stopped" << std::endl;
}

五、常见服务类型

1️⃣ 普通服务(最常见)

Type=simple

2️⃣ 需要自己 fork 的

Type=forking
PIDFile=/var/run/my_service.pid

3️⃣ 一次性任务

Type=oneshot
RemainAfterExit=yes

六、权限与用户(可选)

以普通用户运行服务:

[Service]
User=myuser
Group=myuser

七、调试技巧

查看启动失败原因

sudo systemctl status my_service
journalctl -xe

手动测试程序

/usr/local/bin/my_service

八、完整示例总结

✅ 编译
✅ 放到 /usr/local/bin
✅ 写好 .service
systemctl enable + start


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

  • ✅ 是 普通服务 / 守护进程 / 定时任务
  • ✅ 是否 需要网络
  • ✅ 是否 Docker / 嵌入式 Linux

我可以帮你写 完全贴合你场景的 systemd 配置

0