我们都知道,在Debian 5下面设置系统启动项使用的是 update-rc.d 命令,如:
/usr/sbin/update-rc.d xxx defaults 98
可以参考:http://wangyan.org/blog/ubuntu-update-rc-d.html
但是在 Debian 6 下面,已经没有 update-rc.d 命令了,取而代之的是:insserv 。
下面简单介绍一下它的用法:(下班了,赶紧拷贝一份过来吧)
转自:https://zh.opensuse.org/index.php?title=openSUSE:Packaging_init_scripts&variant=zh
命名
启动脚本的命名必须与 LSB 兼容,它必须被列示在 http://www.lanana.org/lsbreg/init/init.txt。http://www.lanana.org/lsbreg/instructions.html 描述了如何注册新名称。
SuSE 除非是基础核心包,用户软件没必要去注册这种名称,一般命名就是包名,守护程序是包名 + 字母d。
结构
/etc/init.d/skeleton
文件是一个空白的启动脚本,体现了启动脚本的结构。该文件也可以作为启动脚本的模板。
强烈推荐打开这份文件再继续阅读下面内容,否则就会像听天书一样。
LSB 头部
启动脚本本身也是终端脚本,因为文件的开头和其他终端脚本的常规开头一样:
#!/bin/sh
或者
#!/bin/bash
接着通常会是注释。注释应该说明作者、版权或授权方式的信息。启动脚本还必须包含一部分特殊的注释头部来提供关于启动脚本本身的元数据信息。
LSB 头部是由注释作为上下文区别开的边界,该头部的上界是:
### BEGIN INIT INFO
下界是:
### END INIT INFO
所有的 LSB 头部必须有这样的上下边界。
下面例子出自 /etc/init.d/esound
:
# 1995-2002, 2008 SUSE Linux Products GmbH, Nuernberg, Germany. # All rights reserved. # # Author: Stanislav Brabec, feedback to http://www.suse.de/feedback # ### BEGIN INIT INFO # Provides: esound # Required-Start: alsasound $remote_fs # Should-Start: $network $portmap # Required-Stop: alsasound $remote_fs # Should-Stop: $network $portmap # Default-Start: 5 # Default-Stop: # Short-Description: Sound daemon with network support # Description: Starts esound server to allow remote access to sound # card. To use esound locally, you do not need to start this # server on boot. You should edit server settings before # starting it via sysconfig editor: Network/Sound/Esound ### END INIT INFO
LSB 头部由以下几个部分组成:
# Provides: 行
LSB 头部的 # Provides:
行列出了所有本脚本服务能提供的引导设施。其他的服务可以在它们的 # Required-Start:
和 # Required-Stop:
行中引入我们提供的这些引导设施。 引导设施通常是守护程序的名字。如果多个软件包提供了相同的引导设施(例如 sendmail
vs. postfix
, dhcpcd
vs. dhclient
),两者的启动脚本应该提供相同的引导设施名。
# Provides: boot_facility_1 [boot_facility_2...]
当启动脚本带着一个 start 开始参数运行时,即 /etc/init.d/NetworkManager start 这样,Provides 关键词指定的引导设施(们)就被视为可用的,因此其他要求这些引导设施的启动脚本就可以随后启动。当启动脚本带着一个 stop 停止参数运行时,即 /etc/init.d/NetworkManager stop 这样,Provides 关键词指定的引导设施就被视为不再可用。
# Required-Start: 行
LSB 头部的 # Required-Start:
行列出了任何启动此脚本服务必须的引导设施。
# Required-Start: boot_facility_1 [boot_facility_2...]
本行是必须的,即使你的启动脚本不需要任何其他启动脚本提供的引导设施,你也必须有这行,哪怕它是空的!
# Required-Stop: 行
LSB 头部的 # Required-Stop:
行列出了所有在停止本脚本服务之前必须不能被先行停止的引导设施。
# Required-Stop: boot_facility_1 [boot_facility_2...]
本行是可选的,如果一个启动脚本不需要任何在它停止前不能被停止的引导设施,那么就不需要该行。
# Should-Start: 行
LSB 头部的 # Should-Start:
行列出了任何一旦可用就应该在启动本脚本服务前被启动的引导设施。目的是允许额外的即使不可用也不会造成本脚本服务失败的依赖。
# Should-Start: boot_facility_1 [boot_facility_2...]
本行为可选,如果一个启动脚本不需要启动任何可选依赖,那么可以没有本行。
# Should-Stop: 行
LSB 头部的 # Should-Stop:
行列出了所有一旦可用就不能在停止本脚本服务前停止的引导设施。目的是允许额外的即使不可用也不会造成本脚本服务失败的依赖。
# Should-Stop: boot_facility_1 [boot_facility_2...]
本行为可选,如果一个启动脚本不需要任何在它停止前不能停止的额外依赖,本行可以没有。
LSB 允许为本头部定义发行版专有的插件。这样的插件应该以 X-出品商标签-
开头,比如 X-SuSE-。以下是 openSUSE 发行版专有的插件:
# X-Start-Before: 行
LSB 头部的 # X-Start-Before:
行的意思是说本行中所提到的脚本应该在本脚本启动前被启动。
# X-Start-Before: boot_facility_1 [boot_facility_2...]
本行是可选的,目前是 openSUSE 发行版专有的。
# X-Stop-After: line
LSB 头部的 # X-Stop-After:
行的意思是说这里列出的脚本应该在本脚本服务停止后也被停止。
# X-Stop-After: boot_facility_1 [boot_facility_2...]