部分转载:http://blog.csdn.net/sky_qing/article/details/8941176
本人近期在smart4418嵌入式开发板上进行qt程序的开机启动,系统为 Debian GNU/Linux 8.1 (jessie)
目前出现两点要注意:1.http://blog.csdn.net/coekjin/article/details/52498212 raspbian开机启动qt程序
2.http://blog.csdn.net/q1302182594/article/details/48153567
嵌入式Qt程序启动参数-qws
以下是insserv内容:
我们都知道,在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
其中可以使用chkconfig来添加
命名
启动脚本的命名必须与 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...]
本行是可选的,目前也是 openSUSE 发行版专有的。
# X-Start-Before:
和
# X-Stop-After:
都允许脚本作者在新启动脚本中直接使用依赖而不去改动其他的比如系统启动脚本的内容。
# Default-Start: line
LSB 头部的 # Default-Start:
行列出了一些运行级别,在这些运行级别下面,本脚本服务应该默认启用。运行级别间以空格分隔。
# Default-Start: run_level_1 [run_level_2...]
每个在任何运行级别需要默认启动的 SystemV 风格的启动脚本都必须在 LSB 头部中有本行。只有 系统真正需要的脚本服务才可以定义运行级别。如果脚本服务不在任何运行级别下默认启用,那么就不需要提供本行。 例如,如果一个服务在只在运行级别 3,4,和 5 级时默认启动,启动脚本的 LSB 头部就应该指定:
# Default-Start: 3 4 5
# Default-Stop: 行
LSB 头部的 # Default-Stop:
列出了脚本服务没有默认启动的运行级别。运行级别间以空格分隔,且必须包含所有 # Default-Start:
行没有使用过的运行级别。
# Default-Stop: run_level_1 [run_level_2...]
每个需要在任何运行级别下默认启动的 SystemV 风格启动脚本必须在 LSB 头部包含本行 (如果有 # Default-Start:
行就必须有 # Default-Stop:
行,它们总是成对出现。)
例如,一个脚本服务只在运行级别 3,4, 和 5 默认启用,那么 LSB 头部的 # Default-Stop:
行就必须指定运行级别 0, 1, 2, 和 6:
# Default-Stop: 0 1 2 6
# Default-Stop:
行,因为 openSUSE 的启动脚本设置使用了在 init.d(7) 的 man 帮助手册里说明的差分链接方案。但该行依然不能省略。
# Short-Description: 行
LSB 头部的 # Short-Description:
行提供了关于启动脚本行为的简要介绍。本行只有一行且不能超过 80 个字符。
# Short-Description: 这是一个邮件服务器服务。(当然要用英文写)
所有的 openSUSE 下 SysV 风格的启动脚本都必须在 LSB 头部包含 # Short-Description:
行。它有点类似于 RPM spec 文件的 Summary:
标签。这是用于在 YaST 运行级别编辑器中显示的。
# Description: 行
LSB 头部的 # Description:
行提供了启动脚本行为更加完整的描述。它可以是多行,后续的行必须以 '#' 加一个 tab (也就是至少两个空格不能多于四个空格)开头。一旦某行首不满足该条件就以为着多行描述的终止。这也是用来在 YaST 运行级别编辑器里显示的。
Example:
# Description: Bluetooth services for service discovery, authentication, # Human Interface Devices, etc.
所有 openSUSE 下的 SysV 风格的启动脚本必须在 LSB 头部包含 # Description:
行。它可以被视为 RPM spec 文件中的 %description
章节。