这个问题已经困扰我一段时间了,我们有一个在 Solaris 上运行的程序,它可以作为服务很好地管理单模光纤,可以很容易地启用/禁用。
现在,根据我们的市场,我们希望将此服务迁移到 RHEL 6.3,因此我们尝试使用 Upstart 来管理它,并使其具有与 Solaris 上相同的行为。大多数行为都是好的并且满足我们的要求,但是当我们停止服务时,它仍然在启动时自动启动,这不是我们想要的。我们希望无论我们在停止服务后重新启动或关闭服务器多少次,它都会停止。
我读了这篇文章,Ubuntu12.04:如何在启动时禁用守护进程,它说,这个功能可以通过Upstart 1.3来完成,但我们仅限于使用RHEL 6.3,其中Upstart软件包版本为0.6.7,最重要的是,Upstart无法升级,也无法切换到其他平台。 :(
所以,我的问题是:是否有任何替代方法可以实现我的目标,但不改变系统,不引入任何依赖项,并且该服务仍然必须由系统管理,例如 SMF/Upstart/init.d。
这里还有一点要求,我们仍然想实现一个功能,如果用户终止服务进程,系统可以检测到这一点,并尝试以上限次数自动启动该进程,上限次数也可以指定。
SMF 参考:
介绍 Oracle Solaris 11 上服务管理工具 (SMF) 的基础知识 使用 Oracle Solaris 11 上的服务管理工具 (SMF) 进行高级管理
答案1
在基于 rpm 的系统(例如 ReHat)上,用于chkconfig
配置运行级别。service
将在正在运行的系统上处理它。
要永久停止 RH 6 上的服务:
service xyz stop
chkconfig xyz off
SMF 比这复杂得多。由于它正在执行监视、重新启动等操作,因此它似乎执行通常由集群软件执行的操作。
在集群软件中,您通常会从系统控制中获取服务并将其交给集群控制。该服务将在集群启动时启动。
在那里你可能会遇到如下命令:
- 停止服务(一次或永久)
- 仅监控服务
- 如果监视器返回意外的停机状态,正常的集群行为可能会重新启动该服务
如果您不想添加完整的集群套件,您可以采取一些解决方法:
- 将“pstop”方法添加到 init 脚本中,以停止服务并触及计划停机时间标志
- 编写一个 cron 作业来监视服务并在出现故障且不在计划停机时间内重新启动它
- 修改初始化脚本的“start”方法,以便删除计划停机时间标志(如果存在)
答案2
如果您想迁移到 RHEL,请使用RHEL 手册作为参考 - 阅读 Ubuntu 的 Upstart 文档不会让你走得太远。 Init 系统是 Linux 发行版的关键部分之一,也是发行版本身的组成部分之一。尽管各个供应商经常努力实现某种程度的兼容性,但阅读其他发行版的文档(尤其是当您从另一个 UNIX 系统迁移到那里时)并不是一个好主意。
RHEL 在 SysV init 兼容模式下使用 upstart,因此它可能会知道该service
命令。顺便说一下,尝试输入RHEL 服务管理进入你最喜欢的搜索引擎 - 这应该会给你足够的合理的阅读材料。