在UNIX/Linux的系统中,重要的服务一般都是作为系统进程在后台运行的,它们在后台不断的处理请求,而如何运行和管理它们,成了每一个系统管理员要做的重要事情之一。
运行Apache
手动启动Apache
由于Apache程序是通过可执行文件httpd启动的,因此手动启动Apache是容易的,如下命令就可以了:
如果返回上面的错误,说明Apache没有找到默认的服务器主机名,这时Apache会使用本机的IP地址作为服务器名称,当然这样运行也是没有问题的。如果返回一个shell提示符,则一切正常。
我们通过访问主页,会看见一个“”It works!“”的页面。
我们也可以通过命令查看httpd程序是否在运行。
上面的ps命令中,a参数来显示 所有的进程,x参数显示所有终端的进程,u参数显示程序所属用户,| grep httpd 则是通过grep程序过滤出所有的httpd内容。从上面的结果可以看出,httpd正在后台运行。
不了解ps命令的同学可以看 Linux 之 ps命令 。
注:只有一个httpd 进程是属于root ,它永远不响应任何用户的请求,只是负责创建httpd的子进程,这些子进程才是提供Web访问的服务进程。在这里子进程的用户名是daemon。
自动启动Apache服务器
通常在Linux上有两种启动风格:BSD和SysV ,大多数的Linux发行版都使用SysV风格来启动。
BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(University of California, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。
BSD 常被当作工作站级别的Unix系统,这得归功于BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如DEC的Ultrix,以及Sun公司的SunOS。1990年代,BSD 很大程度上被System V 4.x版以及OSF/1系统所取代,但其开源版本被采用,促进了因特网的开发。
System V, 曾经也被称为AT&T System V,是Unix操作系统众多版本中的一支。它最初由AT&T开发,在1983年第一次发布。一共发行了4个System V的主要版本:版本1、2、3和4。System V Release 4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如”SysV 初始化脚本“(/etc/init.d),用来控制系统启动和关闭,System V Interface Definition (SVID)是一个System V如何工作的标准定义。
AT&T出售运行System V的专有硬件,但许多(或许是大多数)客户在其上运行一个转售的版本,这个版本基于AT&T的实现说明。流行的SysV派生版本包括Dell SVR4和Bull SVR4。当今广泛使用的System V版本是SCO OpenServer,基于System V Release 3,以及SUN Solaris和SCO UnixWare,都基于System V Release 4。
System V是AT&T的第一个商业UNIX版本(UNIX System III)的加强。传统上,System V被看作是两种UNIX"风味"之一(另一个是BSD)。然而,随着一些并不基于这两者代码的UNIX实现的出现,例如Linux和QNX,这一归纳不再准确,但不论如何,像POSIX这样的标准化努力一直在试图减少各种实现之间的不同。
它们之间的区别主要为:
Sytem V | BSD | |
Root脚本位置 | /etc/init.d | /etc/rc.d |
默认Shell | Bshell | Cshell |
文件系统数据 | /etc/mnttab | /etc/mtab |
内核位置 | /UNIX | /vmUnix |
打印机设备 | lp | rlp |
字符串函数 | memcopy | bcopy |
终端初始化设置文件 | /etc/initab | /etc/ttys |
终端控制 | termio | termios |
BSD
由于BSD风格的脚本倾向于使用顺序运行,因此只需要在启动脚本的后面加上你的程序路径和名称就可以了。
例:直接在rc文件的最后面加上如下代码
/usr/local/apache/bin/httpd
现在每次启动计算机后都会自动运行httpd,如果要取消服务,则只需要简单地注释掉这一行就可以了。当然,更合理的方法是编写一个启动脚本(脚本中包含路劲判断、出错信息控制等内容),然后在rc的后面加上对脚本的调用。
SysV
sysv风格将Linux的启动分为很多不同的等级,每一个级别有不同的定义:
[root@localhost etc]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
0 — 表示关机
1 — 表示单用户模式
2 — 表示多用户的图形模式
3 — 表示多用户的shell模式
4 — 很少使用
5 — 表示启动图形界面的多用户模式
6 — 表示重启
id:5:initdefault:
上面当前系统的默认启动级别为5.
通常在服务器上使用启动级别3 作为默认设置。
现在我们做两件事:一是写一个启动脚本,将它放入 /etc/init.d 目录中,二是使用In制作链接文件到相应的启动级别目录中。
可以直接使用 /usr/local/apache/bin/ 目录下的apachectl 文件 ,将它复制到/ect/init.d中,然后将它链接到rc3.d目录和rc6.d目录。
[root@localhost /]# cp /usr/local/apache2/bin/apachectl /etc/init.d
[root@localhost /]# ln -s /etc/init.d/apachectl /etc/rc3.d/S90httpd
[root@localhost /]# ln -s /etc/init.d/apachectl /etc/rc0.d/K90httpd
[root@localhost /]# ln -s /etc/init.d/apachectl /etc/rc6.d/K90httpd
以后要是使用启动级别3,那么Linux启动时就会自动启动httpd。
下面我们改变系统启动级别为3,重启:
id:3:initdefault:
可以看见: