gpt4 book ai didi

linux - 在 Red Hat 6.7 中服务崩溃后 inittab 不重新启动服务

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:25 32 4
gpt4 key购买 nike

注意:我运行的是 Red Hat 6.7

我有一个服务,它配置了 Linux init 系统,在机器启动时将进程作为服务启动。这是通过从命令行执行此一次性配置来完成的:

ln -snf /home/me/bin/my_service /etc/init.d/my_service
chkconfig --add my_service
chkconfig --level 235 my_service on

当操作系统重新启动时,服务将按预期启动。

如果服务 (my_service) 崩溃,我还需要重新启动服务。根据我的阅读,我需要做的就是向/etc/inittab 添加一个条目,如下所示:

mysvc:235:respawn:/home/me/bin/my_service_starter

my_service_starter 的样子:

#!/bin/bash
/home/me/bin/my_service start

我的理解是,当 init 系统检测到 my_service 没有运行时,它会尝试通过运行“my_service_starter”来重新启动它。

但是这似乎不起作用。

我需要了解如何在服务崩溃时告诉 Linux init 系统重新启动我的服务。

最佳答案

给定如下条目:

mysvc:235:respawn:/home/me/bin/my_service_starter

然后 inittab 将:

  1. 调用/home/me/bin/my_service_starter
  2. 这将调用 /home/me/bin/my_service start
  3. ...然后退出,所以 init 会提示您的服务失败
  4. 所以 init 将再次调用 /home/me/bin/my_service_starter

...等等,这将导致 init 认为您的脚本重生速度太快,之后它将完全忽略它。

由 inittab 启动的进程预计不会退出。如果你真的想使用inittab来维护你的服务,你可以删除/etc/init.d/my_service,然后在/etc/inittab 你会有这样的东西:

mysvc:235:respawn:/home/me/bin/my_service

并且您需要确保 my_service 在前台运行(一些程序默认自动守护进程,尽管这些程序通常会有某种--run-in-foreground标志)。

如果您使用 systemd 升级到 CentOS 7 或其他系统,这一切都会变得更容易。

您还可以调查“第三方”进程监督程序,例如“supervisord”或“runit”,您可以使用它们在 CentOS 6 上进行进程监控/重启。

更新

正如 mangotang 指出的,我忘记了,RHEL 6 实际上是随 upstart 一起发布的,尽管它几乎完全使用 SysV 风格的初始化脚本。因此,更好的解决方案是创建 Upstart 服务。有一些合理的入门文档 here .

关于linux - 在 Red Hat 6.7 中服务崩溃后 inittab 不重新启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414412/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com