`
hongtoushizi
  • 浏览: 376497 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

ubuntu的init与系统服务设置

阅读更多

转载自: http://iysm.net/?p=178

init

Init是位于/sbin/init的一个程序,它是在linux下,在系统启动过程中,初始化所有的设备驱动程序和数据结构等之后,由内核启动的一个用户级程序,并由此init程序进而完成系统的启动过程。

ubuntu与传统的linux略有不同,使用upstart完成系统的启动,但表面上仍维持init程序的形式。

运行级别

传统上,linux有几种不同的运行级别,包括如下几种:

# 0 - 停机
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 – 系统保留的
# 5 – X11 (x window)
# 6 - 重新启动

系统启动后处于哪一种级别由init读取/etc/inittab文件中的缺省级别设置来确定,一半图形界面的系统是进入级别3。

但是ubuntu与传统的不太一样,默认情况下是找不到/etc/inittab文件的,而且运行级别也有差别,具体分这样几个级别:

# 0 – 关闭系统

# 1 – 单用户模式

# 2~5 – 完整的多用户模式

# 6 – 重新启动

也就是说,默认情况下级别2、3、4、5都是一样的,同时系统的默认级别设定也不是在inittab文件中,而是写在/etc/init/rc-sysinit.conf文件中。打开此文件,可以找到下面一句:

env DEFAULT_RUNLEVEL=2

这表明系统当前默认是进入级别2。

另外,在此文见中还有一段以if [ -r /etc/inittab ] 开始的代码,这里保留了使用inittab指定系统默认运行级别的功能,也就是说,如果用户手动创建了/etc/inittab,那么init将以/etc/inittab中指定的默认运行级别进行系统的启动。比如说用户希望系统以级别3为默认运行级别,则只需在inittab文件中加入如下一行:

id:3:initdefault:

在经过/etc/init/rc-sysinit.conf确定运行级别后,init将进一步运行/etc/init.d/rc,然后根据级别进入/etc/rc[?].d启动或关闭相应的服务。

服务的启动与关闭脚本

ubuntu下启动与关闭服务的脚本存放与/etc/rc[?].d目录下。其中[x]表示0~6,分别对应级别0~6,如/etc目录下的rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d。假设rc-sysinit.conf或inittab中指定的默认级别是2,那么init将执行/etc/rc2.d目录下的脚本启动或关闭相应服务。

如果打开/etc/rc[?].d目录,会发现这些目录下的文件都是形如Snnxxxx或Knnxxxx的符号链接,而且都是指向/etc/init.d。也就是说不同运行级别下服务的启动或关闭脚本均是放在/etc/init.d下,只不过根据不同级别的需要,在对应/etc/rc[?].d目录下放一个链接,不同的级别会需要不同的服务,因此不同/etc/rc[?].d目录下的链接文件也不尽相同以此区分。

其中链接文件中以S开头的表示在调用/etc/init.d目录中对应脚本的时候会传递一个start参数,也就是启动对应服务,而以K开头的则是传递一个stop参数,由此关闭此服务,此处的K表示kill。

S和K后面的nn是一个数字,表示本脚本被执行的先后顺序,小号在前大号在后,这样以解决不同服务之间可能存在的先后依赖关系。比如说ftp服务依赖于网络服务的启动,所以ftp服务的编号就要大于网络服务的编号,在网络服务启动后再行启动。

最后的xxxx则是服务的名字。

另外,除了/etc/rc[0~6].d文件外,还有一个/etc/rcS.d目录,这个目录下的服务脚本与/etc/rc[0~6].d格式类似,也为指向/etc/init.d中的脚本的链接,但是会在/etc/rc[0~6].d中的脚本执行前首先被执行。

服务的安装

根据上面的介绍,如何将一个软件安装为服务也就比较清楚了,那就是在/etc/init.d添加一个服务的启动脚本,然后在需要启动服务的对应级别的/etc/rc[0~6].d中按照文件名格式添加一个指向/etc/init.d中脚本的符号链接。

以apache2为例,默认情况下,apache2编译安装在/usr/local/apache2,apache2的服务器启动脚本是/usr/local/apache2/bin/apachectl,那么安装服务就是要把此apachectl拷贝到需要启动apache2服务器的运行级别对应的/etc/rc[?].d目录下,一半来说ubuntu是运行在级别2下,所以也就是拷到/etc/rc2.d下,命令如下:

sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd

在这里,我们把拷贝的脚本文件名改为惯用的httpd,那么在系统服务中apache2的名称也就是httpd。

手动添加服务的话,就是要在/etc/rc2.d里为httpd作一个形如Snnxxxx的链接。假定启动顺序我们定为80,那么就是要建立一个指向/etc/init.d/httpd的链接/etc/rc2.d/S80httpd,命令如下:

sudo ln -s /etc/init.d/httpd /etc/rc2.d/S80httpd

然后用sysv-rc-conf或者chkconfig –list检查一下就能看到已经在运行级别2下建立的名为httpd的服务,重启后,系统会自动启动apache2。

现在要手动启动、关闭或重启httpd服务器可以使用service命令+服务名+参数的形式,如下三句分别是启动、关闭和重启apache2服务器的命令:

service httpd start

service httpd stop

service httpd restart

要安装服务除了以上手动作链接外,还可以使用一些工具软件来实现,比如常用的有update-rc.d、chkconfig和sysv-rc-conf等。

这里主要以update-rc.d为例

update-rc.d

如用update-rc.d在运行级别2,3,4,5中都添加httpd服务启动命令,并指定启动序号是80,可以如下(注意命令最后的那个点号不能少):

sudo update-rc.d httpd start 80 2 3 4 5 .

如果要在运行级别2,3,4,5中都添加httpd服务关闭命令,并指定关闭序号是80,则可以如下(注意命令最后的那个点号不能少):

sudo update-rc.d httpd stop 80 2 3 4 5 .

而如果要删除httpd服务,则用以下命令就删掉/etc/rc[?].d中所有存在的指向/etc/init.d/httpd的链接:

sudo update-rc.d httpd remove

另外,还可以用带有defaults参数的形式同时向运行级别2,3,4,5中添加启动服务命令,即Start命令,并同时向运行级别0,1,6添加关闭命令,即Kill命令,其中start命令的序号是80,kill命令的序号是90:

sudo update-rc.d httpd defaults 80 90

这条命令也等同于(注意命令stop前面和最后的那两个点号不能少):

sudo update-rc.d httpd start 80 2 3 4 5 . stop 90 0 1 6 .

以上两条命令的效果就是作了如下几个链接:

/etc/rc0.d/K90httpd -> ../init.d/httpd

/etc/rc1.d/K90httpd -> ../init.d/httpd

/etc/rc6.d/K90httpd -> ../init.d/httpd

/etc/rc2.d/S80httpd -> ../init.d/httpd

/etc/rc3.d/S80httpd -> ../init.d/httpd

/etc/rc4.d/S80httpd -> ../init.d/httpd

/etc/rc5.d/S80httpd -> ../init.d/httpd

chkconfig

查看所有服务在所有级别下的情况:

chkconfig –list

查看某服务的情况,如下将查看httpd服务在哪些级别下是被启动的:

chkconfig httpd

在此,如果httpd在2,3,4,5下是被启动,将返回信息:

httpd 2345

sysv-rc-conf

这个软件是有图形界面的,比较直观简单,就不多说了,看看就明白了。

rc.local

在/etc/rc[2~5].d目录下都会有一个S99rc.local,这是一个指向/etc/init.d/rc.local的链接,可以看出,在正常的2~5级别启动的最后都会调用这个rc.local脚本,而/etc/init.d/rc.local中又会检查是否存在/etc/rc.local,并运行之,因此,我们就可以在/etc/rc.local中写入代码,来随系统启动某些程序,实现类似服务的功能。

系统的启动过程

综上,可以看到,系统的启动调用过程就如下过程:

内核 → /etc/init/rc-sysinit.conf → [/etc/inittab] → /etc/init.d/rc → /etc/rc[?].d → /etc/init.d/rc.local → /etc/rc.local

其他linux系统

在其他系统下以上的文件结构和过程略有不同,以Redhat系的CentOS5为例,系统中默认init是使用/etc/inittab文件的,然后读取/etc/rc.sysinit,再根据运行级别进入/etc/rc[?].d。

其中,/etc/rc.sysinit是指向/etc/rc.d/rc.sysinit的链接,/etc/rc[?].d是指向/etc/rc.d/rc[?].d的链接,/etc/rc.local是指向/etc/rc.d/rc.local的链接,所以系统启动的顺序就变成如下:

内核 → /etc/inittab → /etc/ rc.sysinit(/etc/rc.d/rc.sysinit) → /etc/rc[?].d(/etc/rc.d/rc[?].d) → /etc/rc.local(/etc/rc.d/rc.local)

分享到:
评论

相关推荐

    ubuntu22,新系统init

    ubuntu22,新系统init

    Ubuntu系统ssh安装与连接以及sftp文件传送全攻略

    ### Ubuntu系统ssh安装与连接以及sftp文件传送全攻略 #### 一、SSH与SFTP基础知识 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。它可以在不安全的网络环境中提供安全的远程登录服务。SFTP...

    Ubuntu局域网中设置代理服务器上网和设置静态IP.docx

    本篇文章将详细介绍如何在Ubuntu操作系统中设置代理服务器上网和静态IP。下面是相关的知识点: 1. 安装Squid代理服务器:在Ubuntu中安装Squid代理服务器可以使用命令$sudo apt-get install squid。安装完成后,需要...

    ubuntu下开启ssh服务

    在 Ubuntu 系统中,SSH(Secure Shell)服务是一种非常重要的远程管理工具。通过 SSH,用户可以从远程位置安全地控制服务器,执行命令,传输文件等操作。本文将详细介绍如何在 Ubuntu 系统下开启并配置 SSH 服务。 ...

    ubuntu环境中nexus安装之后配置为系统的一个服务.docx

    本文将介绍两种方法将Nexus注册为Ubuntu系统服务:一种是基于`/etc/init.d`的传统方式,另一种是使用`systemd`现代服务管理系统。 1. **/etc/init.d** 方式: - 首先,进入Nexus的安装目录,例如`cd nexus-3.5.0-...

    Ubuntu samba服务配置

    Ubuntu samba 服务配置是 Linux 操作系统中的一种常见服务配置方法,通过本指南,您将学习如何配置 Ubuntu samba 服务,以便在 Linux 和 Windows 平台之间实现文件共享。 安装 Ubuntu samba 包 要安装 Ubuntu ...

    ubuntu系统更改ip

    下面详细介绍如何在Ubuntu系统中配置静态IP地址、设置虚拟IP地址以及修改主机名的详细过程。 ### 配置静态IP地址 Ubuntu系统默认使用动态主机配置协议(DHCP)自动分配IP地址,但在某些情况下需要手动配置静态IP地址...

    ubuntu双网卡设置上网问题

    本文将详细介绍如何在Ubuntu系统中设置双网卡,并实现内外网之间的路由转发。 #### 二、准备工作 1. **硬件准备**:确保您的Ubuntu系统中已安装两块网卡,一块用于连接外部网络(例如互联网),另一块用于连接内部...

    ubuntu共享文件设置

    Samba 是一个自由的软件,允许 Linux 和 Unix 系统与 Windows 系统进行文件共享。Samba 服务器可以模拟 Windows 服务器,提供文件和打印机共享服务。Samba 客户端可以连接到 Samba 服务器,访问共享文件和打印机。 ...

    在Ubuntu操作系统中开启SSH服务和设置IP的步骤.docx

    在 Ubuntu 操作系统中开启 SSH 服务和设置 IP 的步骤 SSH(Secure Shell)是一种安全的远程登录协议,能够加密数据传输,防止中间人攻击和 DNS 欺骗。下面将介绍在 Ubuntu 操作系统中开启 SSH 服务和设置 IP 的步骤...

    设置UbuntuDNS缓存linux服务器应用-电脑资料.pdf

    本文档主要介绍了如何在 Ubuntu 系统中设置 DNS 缓存服务器,提高 DNS 解析速度。下面是该文档中的知识点总结: 1. 安装 dnsmasq 软件包:在 Ubuntu 系统中,需要安装 dnsmasq 软件包以实现 DNS 缓存功能。使用命令...

    laravel-ubuntu-init:用于在Ubuntu 14.04,Ubuntu 16和Ubuntu 18系统上设置Laravel生产环境的Shell脚本

    在使用`laravel-ubuntu-init`时,应遵循安全最佳实践,如设置强密码、更新系统补丁、限制不必要的网络访问,以及使用HTTPS来加密通信。 ### 7. **后期维护** 脚本部署完成后,还需要定期进行安全检查、更新依赖和...

    secureCRT连接Ubuntu出现远程系统拒绝访问

    8. **操作系统或SSH服务软件更新**:有时,Ubuntu更新可能导致SSH服务出现问题。检查是否有待处理的系统更新,并按照提示进行操作。 9. **SELinux/AppArmor策略**:如果启用SELinux或AppArmor,可能会阻止SSH连接。...

    Ubuntu10.10下tftp服务器配置笔记

    5. 启动 TFTP 服务器服务:$sudo /etc/init.d/openbsd-inetd restart 6. 查看 TFTP 服务器状态:netstat -an | more 7. 测试 TFTP 服务器:在 TFTP 服务器目录下新建一个文件,写入数据,然后使用 TFTP 客户端连接 ...

    init “No init found错误信息解析”1

    init 是 Android 系统启动过程中的一个关键组件,它负责加载系统的根文件系统、初始化系统服务、mount 文件系统等等。但是在 Android 系统启动过程中,有时会遇到 "No init found" 错误信息,这个错误信息通常是指 ...

    ubuntu 8.04上安装和设置samba服务

    在Ubuntu 8.04操作系统中安装和设置Samba服务是一项关键任务,它允许Linux系统与Windows设备之间实现文件和打印机共享。Samba是一个开源软件,兼容Microsoft的SMB/CIFS协议,使得不同操作系统的互操作性变得可能。...

    Ubuntu双系统安装后不显示有线网络的解决方案

    在使用Ubuntu作为双系统安装时,有时...总的来说,解决Ubuntu双系统下有线网络不显示的问题,主要涉及驱动安装、系统配置以及网络服务的检查与调整。只要按照正确的步骤操作,大多数情况下都可以找到合适的解决方案。

    ubuntu ip和dns设置

    ### Ubuntu IP和DNS设置详解 #### 一、静态IP地址设置 在Ubuntu系统中,配置静态IP地址是一项基本但非常重要的任务。对于那些需要固定IP地址的服务器或工作站来说,手动配置静态IP地址是非常必要的。下面详细介绍...

    ubuntu linux 网络设置详解

    Ubuntu Linux作为一款广泛使用的开源操作系统,在网络配置方面提供了丰富的功能和选项,本文将详细介绍几种常见的网络设置方法:网卡通过DHCP自动获取IP地址、网卡静态分配IP地址、PPPoE宽带拨号配置以及通过无线...

    Ubuntu下ssh服务的安装和配置文档

    在安装 SSH 服务之前,需要检查系统是否已经安装了 SSH 服务器。可以使用以下命令来检查: ps –e | grep ssh 如果没有找到 ssh-server 服务,那么可以进行安装。如果只有 ssh-agent 进程号,那么说明 SSH 服务还...

Global site tag (gtag.js) - Google Analytics