守护程序启动脚本允许的最长启动时间是多少?
我确实有一个 tomcat 服务器需要很长时间才能启动,我可以在启动脚本中包含逻辑来检查服务是否成功启动。
尽管如此,我仍然担心守护程序启动可能会出现无限循环,如果将其配置为在引导时运行,它甚至可能会影响系统的启动。
不过,我确实想返回正确的退出消息(成功/失败)。
我可以实现一些超时逻辑,但我不知道对于守护程序脚本来说什么是可接受或不可接受的启动时间。
此外,在此服务仍在初始化时停止其他服务的初始化也没有太大意义。
守护程序启动脚本允许的最长启动时间是多少?
我确实有一个 tomcat 服务器需要很长时间才能启动,我可以在启动脚本中包含逻辑来检查服务是否成功启动。
尽管如此,我仍然担心守护程序启动可能会出现无限循环,如果将其配置为在引导时运行,它甚至可能会影响系统的启动。
不过,我确实想返回正确的退出消息(成功/失败)。
我可以实现一些超时逻辑,但我不知道对于守护程序脚本来说什么是可接受或不可接受的启动时间。
此外,在此服务仍在初始化时停止其他服务的初始化也没有太大意义。
系统启动脚本没有“最大允许启动时间”。然而,对于长时间运行的脚本,启动脚本通常会将需要很长时间的程序分拆为后台进程甚至“at”进程。因此,这可以防止缓慢运行的进程在系统“准备好”运行之前花费很长时间。
如前所述,守护进程没有最大或可配置的启动时间。如果您认为该守护进程导致其他守护进程启动,您可以在最后更改其启动顺序。
要调试问题,我现在可以想到三种方法。
1) 显而易见的步骤是为应用程序启用调试日志。我主要使用 RHEL,
/etc/sysconfig/<daemon-name>
可以设置日志级别。2)当你手动启动守护进程时,用strace启动它。
现在在 daemon.out 文件中,观察在每个系统调用结束时打印的时间。以微秒为单位。找出消耗大部分时间的调用。
当你发现这一点时,再次启动守护进程,这次使用 ltrace。现在您知道了有问题的系统调用,找出它卡在哪个库中。
3)写一个systemtap脚本。除非用户有一些使用 stap 编写/调试的经验,否则这不是那么容易。
这将显示目标 pid 将抛出的所有系统调用。
注意 - 首先不要去 stap。我刚才提到它是因为它是一个很棒的内核调试工具,我还没有在网站上看到它的参考资料(或者可能被忽略了)。您需要安装 kernel-debuginfo、kernel-debuginfo-common、kernel-devel、systemtap 包。然后运行脚本作为
我们可以进一步检测有问题的系统调用。
http://sourceware.org/systemtap/documentation.html