【问题标题】:inittab not restarting service after service crash in Red Hat 6.7Red Hat 6.7 中的服务崩溃后 inittab 未重新启动服务
【发布时间】:2016-09-09 14:54:09
【问题描述】:

注意:我运行的是 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 系统重新启动我的服务。

【问题讨论】:

    标签: linux redhat init restart inittab


    【解决方案1】:

    给定一个类似的条目:

    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 实际上是随新贵一起发布的,尽管它几乎完全使用 SysV 风格的初始化脚本。因此,更好的解决方案是创建一个新贵服务。有一些合理的入门文档here

    【讨论】:

    • 我不清楚的部分是:Red Hat 6.7 是使用 System V init(它使用 inittab),还是使用 Upstart?此信息似乎表明 Red Hat 6.7 使用 Upstart:searchenterpriselinux.techtarget.com/tip/… Upstart 是否也使用 inittab 文件?
    • 实际上,RHEL 6 使用 both。所以你实际上可以编写一个新贵服务来完成同样的事情。我总是忘记那里有新贵支持,因为它基本上没有被使用,并且已经在 RHEL 7 中消失了。
    • 在我的 RHEL 6 的 inittab 文件的顶部,它说:# inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. 我想知道这是否意味着我不能指望 inittab 的东西起作用,并且必须使用 upstart?
    • 另外:确保我的服务脚本在前台运行并重新启动后,我的服务没有启动。猜测这一定意味着 inittab 不能按照我对 RHEL 6.7 的预期方式工作。我得让暴发户一试。
    【解决方案2】:

    在 RHEL 6.X 上,/etc/inittab 文件顶部显示:

    # inittab is only used by upstart for the default runlevel. 
    # 
    # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM
    

    RHEL 6.X 使用 Upstart 而不是 System V init 系统。请参阅 initctl(8) 和 initctl(5) 的手册页,或向 Google 咨询 Upstart。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      相关资源
      最近更新 更多