Linux服务器配置与管理

来源:互联网 发布:汤不热是什么软件 编辑:程序博客网 时间:2024/06/01 22:11
 Linux服务器配置与管理

第4章   Linux的服务与进程管理

4.1  Linux的启动过程

4.1.1  启动过程描述

 Linux的启动大体经历以下五个阶段:

  · 主机加电并进行硬件自检后,读取并加载硬盘MBR中的启动引导器(GRUB或LILO),供用户选择要启动的操作系统。

 · 用户选择启动Linux操作系统后,启动引导器从/boot分区读取并加载Linux内核程序(vmlinuz-2.4.20-8和initrd-2.4.20-8.img),然后由内核程序负责初始化系统硬件和设备驱动程序。

  · 之后内核将启动执行init程序,以启动系统的init进程。该进程是Linux系统中运行的第一个进程,其进程号(PID)始终为1,该进程将根据/etc/inittab配置文件的要求执行相应的启动程序,以引导运行系统所需的其他进程,并进入指定的系统运行级别。init进程是其他进程的父进程。

 · 在不同的运行级别,根据系统的设置启动相应的服务程序(不同的运行级别,启动的服务程序有所不同)。

  · 在启动过程的最后,运行shell程序,并显示登录信息。 

4.1.2  inittab配置文件

    init程序位于/sbin目录中,它负责在系统启动时运行一系列程序和脚本文件。init程序一旦被内核调用后,便成为系统的第1号进程,它将根据/etc/inittab配置文件的要求执行相应的启动程序,并进入指定的系统运行级别 。

    

4.2  Linux的服务管理

Linux的服务分为独立运行的服务和受xinetd服务管理的服务两类。xinetd本身也是一个独立运行的服务,它负责管理系统中不频繁使用的服务,当这些服务被请求时,由xinetd服务负责启动运行,完成服务请求后,再结束该服务的运行,以减少对系统资源的占用。 

4.2.1  服务的启动脚本

在Linux中,每个服务都会有相应的服务器启动脚本,该脚本可用于实现启动服务、重启服务、停止服务和查询服务等功能。在服务器启动脚本中,一般还有对该脚本功能的简要说明和使用方法,可利用head命令来查看。 

    所有的服务器启动脚本都放在/etc/rc.d/init.d目录中,脚本名称与服务名称相对应。该目录中有哪些脚本与当前系统中所安装的服务有关。

    /etc/rc.d/rc.local文件相当于dos系统的autoexec.bat文件的功能,放入该文件中的脚本或命令,在其他初始化脚本执行完后,将自动被执行。 

4.2.2  服务的启动与停止

   Linux的服务在系统启动或进入某运行级别时会自动启动或停止,另外在系统运行过程中,也可使用相应的命令来实现对某服务的启动、停止或重启服务。

 1.通过服务启动脚本来管理服务

在Linux中,启动、停止或重启服务可通过执行相应的服务启动脚本来实现。若直接执行相应的服务启动脚本,系统将显示用法帮助,其用法为:

# /etc/rc.d/init.d/服务启动脚本名  {start|stop|status|restart|condrestart|reload}

服务启动脚本名后面的启动参数若为start,则启动该服务;若为stop,则停止该服务;若为restart,则为重启该服务;若为status,则为查询该服务的启动状态。

   比如,若要查询xinetd服务的启动状态,则执行命令:

[root@rh9 root]# /etc/rc.d/init.d/xinetd status

xinetd (pid 1694) is running...

    说明该服务已经启动,其进程号为1694。若要重启该服务,则执行命令:

[root@rh9 root]# /etc/rc.d/init.d/xinetd restart

Stopping xinetd:                                                    [ OK ]

Starting xinetd:                                                     [ OK ]

    若要停止该服务,则执行命令:

[root@rh9 root]# /etc/rc.d/init.d/xinetd stop

Stopping xinetd:                                                    [ OK ]

2.使用service命令管理服务

利用服务启动脚本来启动或停止服务时,每次都要输入脚本的全路径,使用起来比较麻烦,为此,Red Hat Linux专门提供了service命令来解决该问题,使用时只需要指定要启动或停止的服务名即可,其用法为:

service 服务名称  要执行的动作(start|stop|restart)

用户在任何路径下均可通过该命令来实现启动或停止服务,service命令会自动到/etc/rc.d/init.d目录中查找并执行相应的服务启动脚本。

比如,若要重启xinetd服务,则实现命令为:service xinetd restart

若要停止xinetd服务,则实现命令为:service xinetd stop

4.2.3  配置服务的启动状态

在对Linux系统的管理中,经常需要设置或调整某些服务在某运行级别中自动启动或不启动,这可通过配置服务的启动状态来实现,为此Linux提供了ntsysv和chkconfig命令来实现该功能。 

  1.ntsysv命令

    ntsysv命令是一个基于文本字符界面的实用程序,操作简单直观,但只能设置当前运行级别下各服务的启动状态。若要设置其他运行级别下各服务的启动状态,则需要转换到相应的运行级别,然后再运行ntsysv命令来进行设置。 

   2.chkconfig命令

    chkconfig命令可以设置系统中所有服务在各运行级别中的启动状态。 

⑴ 查看服务的启动状态

  命令用法:chkconfig --list  [服务名称]

    chkconfig命令带--list参数,用于查看服务的启动状态,若缺省服务名称参数,则显示所有服务的启动状态,若指定了要查看的服务,则只显示该服务的启动状态。

    比如,若要查看当前系统中各服务的启动状态,则执行命令:

 [root@rh9 root]# chkconfig --list

若要单独查看vsftpd服务的启动状态,则实现命令为:

chkconfig --list vsftpd

    各服务的启动状态改变后,在系统下一次启动时才会生效。 

⑵ 设置独立运行的服务的启动状态

命令用法:chkconfig --level <运行级别列表><服务名称> <on|off|reset>

命令功能:设置指定服务在指定运行级别中的启动状态。参数on代表设置为启动,off为不启动,reset代表恢复为系统的默认启动状态。

例如,若要设置vsftpd服务在2、3、5运行级别启动,则实现命令为:

[root@rh9 root]# chkconfig --level 235 vsftpd on

[root@rh9 root]# chkconfig --list vsftpd

vsftpd    0:off   1:off   2:on   3:on   4:off   5:on      6:off

 ⑶ 设置非独立运行的服务的启动状态

命令用法:chkconfig <服务名称> <on|off|reset>

非独立运行的服务受xinetd服务的管理,因此不存在运行级别启动状态的问题。非独立运行的服务的启动状态改变后,需要重新启动xinetd服务,才能使设置立即生效。

比如,若要设置rsync服务的自启动状态为on,并让其立即生效启动,则实现命令为:

[root@rh9 root]# chkconfig --list rsync

rsync                   off

[root@rh9 root]# chkconfig rsync on

[root@rh9 root]# chkconfig --list rsync

 rsync                   on

[root@rh9 root]# service xinetd restart 

4.3  Linux的进程管理

4.3.1  进程与作业

 Linux是一个多用户、多任务的操作系统,Linux系统上所有运行的任务都可称之为一个进程,每个用户任务、每个系统管理的守护进程,也都可以称之为进程。Linux用分时管理方法使所有的任务共同分享和使用系统的资源。

进程是指在自身的虚拟地址空间运行的一个单独的程序。进程由程序产生,是一个运行着的,要占用系统运行资源的程序,一个程序可以启动多个进程。程序是命令的集合。

    Linux系统中所有进程都是相互联系的。除了初始化进程外,所有进程都有一个父进程。新进程不是被创建,而是被复制,Linux系统中所有的进程都是由进程号(PID)为1的init进程衍生而来的。在Shell下执行程序启动的进程就是Shell进程的子进程,一般情况下,只有子进程结束后,才能继续父进程,若是从后台启动的,则不用等待子进程结束。 

4.3.1  进程与作业

   Linux系统的进程大体可分为交互进程、批处理进程和监控进程(守护进程)三种。交互进程是在shell下通过执行程序所产生的进程,可在前台运行,也可在后台运行;批处理进程是一个进程序列;监控进程通常也称为守护进程,它是Linux系统启动时就自动启动产生的进程,并在后台运行。

正在执行的一个或多个相关进程称为一个作业,即一个作业可以包含一个或多个进程,比如,在执行使用了管道和重定向操作的命令时,该作业就包含了多个进程。使用作业控制,可以同时运行多个作业,并在需要时在作业之间进行切换。

   作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。Shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。

4.3.2  进程的启动

在键入需要运行的程序名来执行一个程序时,此时也就启动了一个进程。每个进程都有一个进程号,用于系统识别和调度该进程。启动进程有两个主要途径,即手工启动和调度启动,调度启动是事先设置好在某个时间要运行的程序,当到了预设的时间后,由系统自动启动。 

1.手工启动

由用户在shell命令行下输入要执行的程序来启动一个进程,即为手工启动进程,其启动方式又分为前台启动和后台启动,默认为前台启动,若在要执行的命令后面跟随一个&,则为后台启动,此时进程在后台运行,shell可继续运行和处理其他程序。

2.调度启动

    在对Linux系统进行维护和管理的过程中,有时需要进行一些比较费时而且占用资源较多的操作,为不影响正常的服务,通常将其安排在深夜由系统自动运行,此时就可以采用调度启动要运行的程序,并事先设置好任务运行的时间,到时系统就会自动完成指定的操作。 

4.3.3  管理系统的进程

1.查看系统的进程

   Linux系统中每个运行着的程序都是系统中的一个进程,要查看系统当前的进程,可使用ps命令来实现。其用法为:ps 命令选项

   若缺省参数,直接执行ps命令,则仅显示当前控制台的进程,如:

[root@rh9 root] # ps

其它命令参数:

u  输出进程用户所属的信息,带上u参数后,将显示更详细的信息 

a  显示系统中所有用户的进程;

x  表示也显示没有控制台的进程,包括后台进程。参数a与x同时使用,可用于显示系统中的所有进程,另外也可直接使用-e参数来实现。 

查看各进程的继承关系,可使用pstree或pstree -pu命令。 

2.结束进程的运行

    在Linux系统的运行过程中,有时会遇到某个进程由于异常情况,对系统停止了反应,此时就需要停止该进程的运行。另外,当发现一些不安全的异常进程时,也需要强行终止该进程的运行,为此,Linux提供了kill和killall命令来结束进程的运行。 

  ⑴ kill命令

    该命令使用进程号来结束指定进程的运行。可使用ps命令获得该进程的进程号,然后再使用kill命令将该进程“杀死”,其用法为:kill [-9] 进程号

    kill命令向指定的进程发送终止运行的信号,进程在收到信号后,会自动结束本进程,并处理好结束前的相关事务,属于安全结束进程,不会导致Linux系统的崩溃或不稳定。

参数-9用于强行结束指定进行的运行,适合于结束已经“死掉”而没有能力自动结束的进程。带上该参数后,该命令属于非正常结束进程。 

   为了查看指定进程的进程号,可使用管道操作和grep命令相结合的方式来实现,比如,若要查看xinetd进程对应的进程号,则实现命令为:

    [root@rh9 root]# ps -e|grep xinetd

    1665  ?   00:00:00 xinetd

    从其输出信息中,可知该进程的进程号为1665,若要结束该进程,则执行命令: [root@rh9 root]# kill 1665

⑵ killall命令

    该命令使用进程名来结束指定进程的运行。若系统存在同名的多个进程,则这些进程将全部结束运行,其用法为:killall [-9] 进程名

  参数-9用于强行结束指定进程的运行,属于非正常结束。 

  例如,若要结束xinetd进程的运行,则实现命令为:killall xinetd