我有一个例程,它会使linux崩溃,并使用系统函数强制重启。
现在,我遇到了这样一个问题:当某个进程终止时,我需要使linux崩溃。使用脚本启动进程并在脚本结束时重新启动服务器是不合适的,因为这需要一些毫秒时间。
另一个想法是同时产生拍摄过程,并使用计数器的轮询,如果计数器没有递增,重新启动服务器将是另一个想法。
这将导致几乎即时的反应。
现在的问题是什么是一个好的时间框架。我不知道linux的调度程序如何保证任何这样的计数器的某个更新,以及一个好的超时时间。
此外,我还希望听到一些替代第二个进程产生的方案。有没有可能建议linux在给定进程崩溃的情况下运行特定的例程,或者在给定进程出现问题的情况下建议侦听器执行机制?
发布于 2015-07-13 08:14:08
超时的概念已经在内核中实现了。您可以将任何应用程序注册为软件监视器,但您必须降低默认超时。在http://linux.die.net/man/8/watchdog上可以找到一些想法。该应用程序还可以处理用户定义的测试。实际上,除非您正在尝试运行像linux-rt这样的内核,否则在负载较重的系统上,超时时间低于100ms可能是危险的--特别是当检查需要轮询另一个应用程序时。
在应用程序崩溃的情况下,如果您的init支持通知,您可以处理它们。例如,通过监控文件进行both upstart and systemd can do that (确保在正确的位置创建核心转储)。
但无论如何,我建议重新考虑毫秒级分辨率重启的想法。你真的需要在那段时间内杀死系统,还是只需要隔离它?仅仅同步磁盘就需要几毫秒的额外时间,您可能不想错过这一步。您可以确保受影响的应用程序不工作,而不是简单地杀死主机(SIGABRT?)并终止所有网络(刷新iptables,将默认值更改为DROP)。
https://stackoverflow.com/questions/31373356
复制相似问题