Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 42 additions & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,12 +199,48 @@ fn main() -> std::io::Result<()> {
.init();

info!("你好喵~");
ctrlc::set_handler(move || {
//目前来看这个已经没用了,但以防万一卡死,还是留着好了
error!("已关闭 biliroaming_rust_server");
std::process::exit(0);
})
.unwrap();
// 同时处理 Ctrl+C (SIGINT) 与 systemd stop (SIGTERM),避免只响应 SIGINT
// 与原先 ctrlc 行为一致:收到信号后立即退出整个进程(含 background task 与 actix worker)
#[cfg(unix)]
{
use tokio::signal::unix::{signal, SignalKind};
rt.spawn(async {
let mut sigint = match signal(SignalKind::interrupt()) {
Ok(s) => s,
Err(e) => {
error!("注册 SIGINT 处理器失败: {e}");
return;
}
};
let mut sigterm = match signal(SignalKind::terminate()) {
Ok(s) => s,
Err(e) => {
error!("注册 SIGTERM 处理器失败: {e}");
return;
}
};
tokio::select! {
_ = sigint.recv() => {
error!("收到 SIGINT,已关闭 biliroaming_rust_server");
}
_ = sigterm.recv() => {
error!("收到 SIGTERM,已关闭 biliroaming_rust_server");
}
}
std::process::exit(0);
});
}
#[cfg(not(unix))]
{
rt.spawn(async {
if let Err(e) = tokio::signal::ctrl_c().await {
error!("注册 Ctrl+C 处理器失败: {e}");
return;
}
error!("已关闭 biliroaming_rust_server");
std::process::exit(0);
});
}
// //init server_config => BiliConfig
//fs::write("config.example.yml", serde_yaml::to_string(&config).unwrap()).unwrap(); //Debug 方便生成示例配置
{
Expand Down