土法炼钢兴趣小组的算法知识备份

部署与运维

目录

写好代码只是第一步,如何让服务在 Linux 服务器上稳定运行、易于管理,是运维的关键。

1. Daemon 化 (守护进程)

1.1. 传统方式 (Double Fork)

在 systemd 普及之前,我们需要手动编写代码让程序后台运行: 1. fork() 并退出父进程。 2. setsid() 创建新会话。 3. 再次 fork() 防止重新获取控制终端。 4. 重定向 stdin/stdout/stderr 到 /dev/null

1.2. Systemd 集成 (推荐)

现在推荐直接在前台运行,由 systemd 管理后台化和日志。

myapp.service:

[Unit]
Description=My Libevent Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myserver --port 8080
Restart=always
User=nobody
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

2. 优雅退出 (Graceful Shutdown)

直接 kill -9 会导致数据丢失、文件损坏。我们需要捕获信号,有序退出。

2.1. 信号处理

如前文所述,使用 evsignal_new 监听 SIGINT (Ctrl+C) 和 SIGTERM (kill)。

2.2. 退出策略

2.3. 资源清理

退出循环后,event_base_dispatch 返回。此时应释放资源: 1. evconnlistener_free (停止监听)。 2. bufferevent_free (关闭现有连接)。 3. event_base_free

3. 总结

拥抱 Systemd,实现优雅退出,是生产级服务的标配。


上一篇: 06-production/ecosystem.md - 生态集成 下一篇: 06-production/observability.md - 可观测性

返回 Libevent 专题索引


By .