Debian 如何获取更新rc.d或insserv以遵循依赖关系

Debian 如何获取更新rc.d或insserv以遵循依赖关系,debian,init,Debian,Init,我一直在尝试设置一个脚本,以便在Debian 7.1系统上启动时运行,但现在运气不佳。我尝试过同时使用insserv和updaterc.d,但这两种工具的问题似乎都是一样的。以下是我脚本的LSB部分: #!/bin/bash ### BEGIN INIT INFO # Provides: start_guest # Required-Start: $bootlogs $sudo $virtualbox-guest-utils $syslog # Requir

我一直在尝试设置一个脚本,以便在Debian 7.1系统上启动时运行,但现在运气不佳。我尝试过同时使用insserv和updaterc.d,但这两种工具的问题似乎都是一样的。以下是我脚本的LSB部分:

#!/bin/bash

### BEGIN INIT INFO
# Provides:             start_guest
# Required-Start:       $bootlogs $sudo $virtualbox-guest-utils $syslog
# Required-Stop:        $bootlogs $sudo $virtualbox-guest-utils $syslog
# Should-Start:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    start_guest
### END INIT INFO
使用update rc.d,以下是我尝试过的各种命令,它们都具有相同的结果:

sudo update-rc.d start_guest defaults
sudo update-rc.d start_guest defaults 22
sudo update-rc.d start_guest start 22 2 3 4 5 . stop 78 2 3 4 5 .
无论我运行哪一个,我都被告知(显示运行级别2仅为2,3,4,5相同,0,1,6均为K01):

无论我得到什么样的依赖信息,我都无法让它从S17以外的地方开始。不幸的是,../rc2.d/S19bootlogs将在我的脚本之后启动,这将阻止我获取有时关键的日志信息

当我尝试用insserv做同样的事情时,我被告知正常的服务已经被指示启动我的新服务,但它似乎仍然没有遵循依赖顺序。在start_guest开始运行之前,我还需要运行几个服务(如sudo、virtualbox guest UTIL等)

几乎可以回答我的问题,但似乎连“必需的开始”依赖项也没有得到遵循


如何让脚本在启动时运行并遵循给定的依赖项?谢谢大家!

事实证明,有三种不同的方法可以将依赖项添加到LSB头中,并且很少有文档来解释这些差异。就我而言,正确的LSB头实际上是:

# Required-Start:       bootlogs sudo virtualbox-guest-utils $syslog
# Required-Stop:        bootlogs sudo virtualbox-guest-utils $syslog
(在这两行中,我都可以删除sudo和virtualbox guest-utils,因为正是引导日志迫使我的start\u guest脚本启动最新版本。)

一旦我的LSB头遵循了这个语法,我就能够运行
updaterc.dstart\u guest defaults
,它完全满足了我的要求

当列出需要在新初始化脚本之前或之后启动或停止的服务时,有几种方法可以列出它们

  • 使用
    $name
    来引用或虚拟服务
  • 使用
    name
    引用单个现有服务以扩展

    将依赖项添加到LSB头中时,确保依赖项与依赖项的init脚本的“Provides:”字段中的标识符匹配,而不是与/etc/init.d中的依赖项脚本名称匹配


    我在avahi守护进程之后尝试启动mpd时遇到了这个问题。在Raspbian中,avahi守护进程初始化脚本“提供:avahi”。InServ失败,抱怨在mpd之前必须启用avahi守护程序,直到我将LSB头更改为使用avahi,而不是avahi守护程序。

    感谢您的提问和回答,但我仍然无法添加对
    sudo
    的依赖项
    sudo
    的优先级为75,而依赖于
    sudo
    的脚本的优先级为20。据我所见,sudo的优先级为75相当低。我的大多数服务的优先级为25或更少,即使是我添加的服务。当您运行像sudo update rc.d sudo defaults 18这样的行时会发生什么情况(其中18是系统上启动sudo的合理数字)?但是,这并不能证明什么。如果sudo优先级更改为18,那么我的脚本有20个优先级将是一个可预测的结果。依赖解决的真正证据是,是否尊重最初的优先级。
    me@bronze:/etc/init.d# sudo insserv start_guest 
    insserv: Service remote_fs has to be enabled to start service start_guest
    insserv: Service syslog has to be enabled to start service start_guest
    insserv: exiting now!
    
    # Required-Start:       bootlogs sudo virtualbox-guest-utils $syslog
    # Required-Stop:        bootlogs sudo virtualbox-guest-utils $syslog
    
    insserv  scans  for  System Facilities in the configuration file /etc/insserv.conf
    and each file in the directory /etc/insserv.conf.d/.  Each line which begins with
    $ and a following name defines a system facility accordingly to the Linux Standard
    Base Specification (LSB)
    
    Names starting  with a `+' sign are marked as optional.  If the service with the
    name after the plus sign is available it will be used,  if  not  available  it
    is  ignored silently.