注意:我正在运行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:重生:/首页/我/斌/ my_service_starter
my_service_starter的样子:
#!/bin/bash
/home/me/bin/my_service start
我的理解是,当init系统检测到my_service没有运行时,它会尝试通过运行" my_service_starter"来重新启动它。
然而,这似乎不起作用。
我需要了解如何告诉Linux init系统在服务崩溃时重新启动我的服务。
答案 0 :(得分:1)
给出如下条目:
mysvc:235:respawn:/home/me/bin/my_service_starter
然后inittab将:
/home/me/bin/my_service_starter
/home/me/bin/my_service start
init
将使您的服务失败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风格的init脚本。因此,更好的解决方案是创建一个upstart服务。有一些合理的入门文档here。
答案 1 :(得分:1)
在RHEL 6.X上,在/ etc / inittab文件的顶部显示:
String value = Console.ReadLine();
int number1;
switch (value)
{
case "ATX": number1 = 3; break;
case "XTS": number1 = 34; break;
case "CTS": number1 = 2; break;
default: number1 = 0; break;
}
Console.WriteLine(number1);
RHEL 6.X使用Upstart而不是System V init系统。请参阅initctl(8)和initctl(5)的手册页,或向Google询问Upstart。