使用systemctl编程Rust以停止安全



我正在rust中编写一个要求很高的程序,该程序具有用于处理非常重要的数据的可变线程,我想知道是否有一种方法可以通过systemctl发送信号来停止它,这样我就可以确保它在停止之前完成了任务,因为它要求很高,使用http_request,线程是变量,我无法估计从发送信号到进程终止我需要等待多少时间。

在esscense中,它是一个在变量设置为false之前一直处于循环中的守护进程,如以下

loop {
// Process goes here
if !is_alive {
break;
}
}

我现在正在做的是,该程序正在询问一个";config.json";文件,如果它是"strong";"活着",但我认为这不是最好的方式,因为我不知道程序何时停止,只能看到它正在停止,但不能看到它将持续多久,如果我这样做,systemctl将显示服务处于活动状态,即使我手动关闭了它。

如果您想尝试Systemd服务行为,我会查看Systemd文档。在这种情况下,我将引导您进入关于TimeoutStopSec的部分。

根据文档,您可以使用TimeoutStopSec=infinity禁用系统停止命令上的任何超时。这与实际处理systemd默认使用的SIGTERM信号相结合就可以了。

此外,还有KillSignal选项,您可以通过该选项指定发送到程序的信号以停止程序,或者ExecStop指定要运行的程序以停止服务。

我希望,有了这些,你应该能够弄清楚。