如何确定我的服务正在使用 runit 还是 init?

如何确定我的服务正在使用 runit 还是 init?

如何确定我的服务是否正在使用runitinit?我使用Ubuntu 10.0.4。

如nginx、chef、puppet等。

答案1

pstree 给我流程如下,

$ pstree
init-+-VBoxService---7*[{VBoxService}]                                                                 
     |-acpid                                                                                           
     |-atd                                                                                             
     |-cron                                                                                            
     |-dbus-daemon                                                                                     
     |-2*[dhclient3]                                                                                   
     |-5*[getty]                                                                                       
     |-login---bash---sudo---su---bash---pstree                                                        
     |-nginx---4*[nginx]                                                                               
     |-rsyslogd---3*[{rsyslogd}]                                                                       
     |-runsvdir-+-runsv---node---{node}                                                                
     |          |-runsv---java---9*[{java}]                                                            
     |          `-runsv                                                                                
     |-sshd                                                                                            
     |-udevd---2*[udevd]                                                                               
     |-upstart-socket-                                                                                 
     |-upstart-udev-br                                                                                 
     `-whoopsie---{whoopsie} 

我想,这样一来,就可以决定了。

答案2

我不完全确定,但自从runit使用主管,您应该能够通过查看进程树来识别它,即从ps fauxor 的输出(如果已安装)pstree

你也可以只是runit,即运行sv status nginx

但请注意,如果您所做的只是安装runit,可能什么也没有得到切换到使用它而不是“普通” init。您可以检查/proc/cmdline是否出现init=/sbin/runit-init.

答案3

如果您需要您的具有通用控制接口的服务,最好用sv命令模仿 init.d 脚本行为。如果sv被称为 a /etc/init.d/NAME command,它会自动将其转换为sv command NAME.

如果您在主管下运行某些服务(假设是 ssh)runit,您可以执行以下操作:

  1. 重命名当前初始化脚本:

    dpkg-divert --rename /etc/init.d/ssh
    
  2. 创建具有相同名称的符号链接:

    ln -vs $(which sv) /etc/init.d/ssh
    

现在您可以使用熟悉的命令来管理您的服务,如下所示:

/etc/inti.d/ssh status
invoke-rc.d ssh status

不过,拥有符号链接会引起一些关于 LSB 标头的抱怨。因此,最好不要使用符号链接,而是创建一个如下所示的包装器脚本:

#!/bin/sh

### BEGIN INIT INFO
# copy these headers from your original script which
    # can be found at /etc/init.d/ssh.distrib
    ### END INIT INFO

exec /usr/bin/chpst -b $0 /usr/bin/sv "$@"

这样,您就可以以相同的方式管理服务,无论它们是否处于运行状态runit

相关内容