在 Linux 下用 C++ 配置服务,通常指把你的 C++ 程序做成一个 systemd 服务,让它可以 开机自启、后台运行、自动重启。下面按最常见、最推荐的方式一步步说明。
g++ main.cpp -o my_service
sudo cp my_service /usr/local/bin/
sudo vim /etc/systemd/system/my_service.service
[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 |
开机启动级别 |
sudo systemctl daemon-reload
sudo systemctl start my_service
sudo systemctl enable my_service
sudo systemctl status my_service
journalctl -u my_service -f
Type=simple 时,不要写 daemon 代码。
❌ 错误示例:
daemon(0, 0);
✅ 正确示例:
while (true) {
// do work
sleep(1);
}
#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;
}
Type=simple
Type=forking
PIDFile=/var/run/my_service.pid
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
如果你愿意,可以告诉我:
我可以帮你写 完全贴合你场景的 systemd 配置。