Ubuntu下的init.d管理update-rc.d
计算机在启动的时候会自动执行一些脚本,用于启动一些应用程序服务,update-rc.d 是管理这些脚本的常用命令之一。
首先这是 LinuxQuestions 中对 update-rc.d 的定义:
update-rc.d is the Debian utility to install and remove System-V style init script links. Other distributions (such as Red Hat) use chkconfig. With update-rc.d, you can schedule tasks to be started when you boot your computer, for example the ssh service.
update-rc.d 是一个 Ubuntu 和 Debian 下的工具程序,用来添加和移除 System-V 类型的启动脚本。
这些脚本都叫做「System-V init script」,且以实际文件而不是链接文件的方式存储在 /etc/init.d 目录下。(之所以强调实际文件后文会解释原因)
其他的 Linux 发行版(例如红帽)使用 chkconfig 这个命令。
update-rc.d 就是通过管理 /etc/init.d 目录下的脚本文件来管理系统启动时的计划任务的,例如 ssh 服务、Apache 服务、MySQL 服务等。
因此 /etc/init.d 目录就是系统的启动脚本所在的目录,其中的每一个文件都是一个启动脚本,都代表了某一类应用程序服务。除非我们要手动编写启动脚本,否则我们不需要修改这个目录下的文件,在安装一些需要开机启动的应用程序的时候对应的脚本会自动被添加进去。
而系统还有另外一类目录叫 /etc/rcX.d,X 代表了 Linux 系统的运行级别。总共有 7 种运行级别,因此就有 7 个 /etc/rcX.d 目录(例如 /etc/rc5.d、/etc/rc0.d)。
/etc/rcX.d 目录下都是一些符号链接文件,这些链接文件都指向 /etc/init.d 目录下的脚本文件,命名规则为 K+NN+服务名或 S+NN+服务名,其中 NN 为两位数字。系统会根据指定的运行级别进入对应的 /etc/rcX.d 目录,并按照文件名顺序检索目录下的链接文件。
– 对于以 K 开头的文件,系统将终止对应的服务
– 对于以 S 开头的文件,系统将启动对应的服务
所以,到这而 Linux 启动项的内部实现就大致明晰了:
如果在某一运行级别下,对应的 /etc/rcX.d 下的链接文件决定了启动时系统对于这些脚本所采取的行动。换句话说,修改 /etc/rcX.d 下的文件可完成系统启动项的配置。但是这样的方法过于繁琐,所以才有了 update-rc.d 命令,它通过直接检索脚本名称和相应的参数来快速管理这些启动脚本。
总结起来就是:
- /etc/init.d 目录下存放系统启动时执行的脚本
- /etc/rcX.d 目录下存放脚本在不同运行级别下的链接文件
- 通过修改 /etc/rcX.d 目录可完成 Linux 下启动脚本的配置
- 通过 update-rc.d 命令快速实现上一条描述的情况
update-rc.d 命令的脚本管理
使用 update-rc.d 命令需要指定脚本名称和一些参数,它的格式看起来是这样的(需要在 root 权限下):
update-rc.d [-n] [-f] <basename> remove
update-rc.d [-n] <basename> defaults
update-rc.d [-n] <basename> disable|enable [S||||]
update-rc.d <basename> start|stop <NN> <runlevels>
-n: not really
-f: force
其中:
disable|enable 代表脚本还在 /etc/init.d 中,并设置当前状态是手动启动还是自动启动。
start|stop 代表脚本还在 /etc/init.d 中,开机,并设置当前状态是开始运行还是停止运行。(启用后可配置开始运行与否)
NN 是一个决定启动顺序的两位数字值。(例如 90 大于 80,因此 80 对应的脚本先启动或先停止)
runlevels 则指定了运行级别。
例如,添加一个新的启动脚本 sample_init_script,并且指定为默认启动顺序、默认运行级别(要有实际的文件存在于 /etc/init.d,即若文件 /etc/init.d/sample_init_script 不存在,则该命令不会执行):
$ update-rc.d sample_init_script defaults
# 上一条命令等效于(中间是一个英文句点符号):
$ update-rc.d sample_init_script start . stop
安装一个启动脚本 sample_init_script,指定默认运行级别,但启动顺序为 50:
$ update-rc.d sample_init_script defaults
安装两个启动脚本 A、B,让 A 先于 B 启动,后于 B 停止:
$ update-rc.d A
$ update-rc.d B
删除一个启动脚本 sample_init_script,如果脚本不存在则直接跳过:
$ update-rc.d -f sample_init_script remove
这一条命令实际上做的就是一一删除所有位于 /etc/rcX.d 目录下指向 /etc/init.d 中 sample_init_script 的链接(可能存在多个链接文件),update-rc.d 只不过简化了这一步骤。
Update: 如果只是需要使用 service <basename> start/stop/status, 只需要将 basename 的 init script 放到 /etc/init.d 下即可, 不需要通过update-rc.d注册
Update 2017-11-13: 对于通过mysql官方deb包安装的mysql5.7, 使用update-rc.d mysql remove无效, 可以使用 sudo systemctl disable mysql 来禁止mysql开机自启动
Ubuntu下的init.d管理update-rc.d的更多相关文章
- ubuntu下后台服务的管理
注册后台服务后都有脚本存在/lib/systemd/system路径下 如mysql为mysql.service 被service管理的进程被杀掉还是会重启的 应使用service XXX stop停 ...
- Ubuntu下安装virtualbox: RTR3InitEx failed with rc=-1912 (rc=-1912)
下载好合适的安装包: http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html 然后进行安装,配 ...
- ubuntu下出现的问题-控制台更新源失败
Ubuntu下控制台输入sudo apt-get update之后出现的问题:E: Could not get lock /var/lib/apt/lists/lock - open (11: Res ...
- imagemagick 之 Fred's ImageMagick Scripts 在Ubuntu 下的实践
Fred's ImageMagick Scripts 官网:http://www.fmwconcepts.com/imagemagick/index.php Windows 10 (64-bit) u ...
- ubuntu下ROS安装时sudo rosdep init和rosdep update的解决方法
问题: 在ubuntu上多次安装matlab选择合适的版本来调用摄像头,终于把系统搞坏了,重装系统后,ROS无法安装,每次安装到sudo rosdep init和rosdep update报错的问题, ...
- 解决Ubuntu下vbox的(rc=-1908)
在Ubuntu下用虚拟机VBOX的时候总是遇到 Kernel driver not installed (rc=-1908) The VirtualBox Linux kernel driver (v ...
- solr的访问权限管理及ubuntu下iptables的设置
Apache Solr 是一个开源的搜索服务器,该平台默认允许匿名访问,攻击者可读取平台中各类敏感信息.之前考虑过增加账号密码访问,但是没有搞定,所以采用了曲线救国的方式,设置solr服务器只允许部分 ...
- Ubuntu下Apache+SVN+submin实现WEB管理SVN
为什么需要submin管理SVN? 原来在Ubuntu下,都是直接通过命令行创建SVN仓库并分配权限,但是这有一些问题: 每创建一个SVN仓库,都需要修改httpd.conf 每创建一个帐户,都需要手 ...
- 在Ubuntu下运行 apt-get update命令后出现错误:
在Ubuntu下运行 apt-get update命令后出现错误: The package lists or status file could not be parsed or opened sud ...
随机推荐
- jstorm简介
最近在研究jstorm,看了很多资料,所以也想分享出来一些. 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2 ...
- SGU536 Berland Chess
棋盘上白子只有一个国王 黑子给出 各子遵从国际象棋的走法 黑子不动,白子不能走进黑子的攻击范围以内 问白字能不能吃掉所有的黑子 直接搜索就好了,各子状态用二进制表示 不过每个子被吃之后攻击范围会改变 ...
- Windows server 2012 R2 与 Windows 2016 的双系统重启选项
一台主机上,同时安装了Windows 2012R2还有Windows 2016, 但是如何能在任意一个系统重启到另一个呢? 下图中,在Win2012R2中,无法选择重启到2016中. 解决方案 === ...
- 国外物联网平台(1):亚马逊AWS IoT
国外物联网平台(1)——亚马逊AWS IoT 马智 平台定位 AWS IoT是一款托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互. AWS IoT可支持数十亿台设备和数万亿条消息,并 ...
- 跨平台APP----对Cordova,APPCan,DCloud,APICloud四大平台的分析
前言: 移动开发是未来一个很重要的IT领域,而跨平台开发将是这一领域最重要的事情. ----谷震平 一 兵器谱 在国外,最大的是Cordova(PhoneGap,2011年广泛流行), ...
- SciPy 安装不上?
参考:链接:https://www.zhihu.com/question/30188492/answer/150928275来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...
- 如何使用Android studio打开eclipse项目
转: http://blog.csdn.net/zcw93219/article/details/50770445
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据
将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...
- WordPress 获取指定分类ID的分类信息
get_term:直接从数据库中获取分类信息get_the_category:使用post_id作为参数,先根据post_id查询对应的文章然后再返回对应的分类信息,如果没有文章信息则返回Null 之 ...
- Oracle中对数字加汉字的排序(完好)
之前写过一篇 Oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍 后来在开发的过程中又遇到相似问题.数据不一样了,按之前的使用方法是不适用的. 之前的是数字在前汉字在后,最基本的差别是 ...