14.5 Linux源码包服务管理

网友投稿 597 2022-05-30

本节我们先学习源码包服务的启动管理,再来学习源码包服务的自启动管理,最后学习如何让源码包服务被系统服务管理命令识别。

源码包服务的启动管理

源码包服务中所有的文件都会安装到指定目录当中,并且没有任何垃圾文件产生(linux 的特性),所以服务的管理脚本程序也会安装到指定目录中。源码包服务的启动管理方式就是在服务的安装目录中找到管理脚本,然后执行这个脚本。

问题来了,每个服务的启动脚本都是不一样的,我们怎么确定每个服务的启动脚本呢?还记得在安装源码包服务时,我们强调需要査看每个服务的说明文档吗(一般是 INSTALL 或 READEM)?在这个说明文档中会明确地告诉大家服务的启动脚本是哪个文件。

我们用 apache 服务来举例。一般 apache 服务的安装位置是 /usr/local/apache2/ 目录,那么 apache 服务的启动脚本就是 /usr/local/apache2/bin/apachectl 文件(查询 apache 说明文档得知)。启动命令如下:

[root@localhost ~]# /usr/local/apache2/bin/apachectl start|stop|restart|... \#源码包服务的启动管理

例如:

[root@localhost ~]# /usr/local/apache2/bin/apachectl start \#会启动源码包安装的apache服务

注意,不管是源码包安装的 apache,还是 RPM 包默认安装的 apache,虽然在一台服务器中都可以安装,但是只能启动一因为它们都会占用 80 端口。

源码包服务的启动方法就这一种,比 RPM 包默认安装的服务要简单一些。

源码包服务的自启动管理

源码包服务的白启动管理也不能依靠系统的服务管理命令,而只能把标准启动命令写入 /etc/rc.d/rc.local 文件中。系统在启动过程中读取 /etc/rc.d/rc.local 文件时,就会调用源码包服务的启动脚本,从而让该服务开机自启动。命令如下:

[root@localhost ~]# vi /etc/rc.d/rc.local \#修改自启动文件 \#!/bin/sh \#This script will be executed *after* all the other init scripts. \#You can put your own initialization stuff in here if you don11 \#want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/local/apache2/bin/apachectl start \#加入源码包服务的标准启动命令,保存退出,源码包安装的apache服务就被设为自启动了

让源码包服务被服务管理命令识别

在默认情况下,源码包服务是不能被系统的服务管理命令所识别和管理的,但是如果我们做一些设定,则也是可以让源码包服务被系统的服务管理命令所识别和管理的。不过笔者并不推荐大家这样做,因为这会让本来区别很明确的源码包服务和 RPM 包服务变得容易混淆,不利于系统维护和管理。

我们做一个实验,看看如何把源码包安装的 apache 服务变为和 RPM 包默认安装的 apache 服务一样,可以被 service、chkconfig、ntsysv 命令所识别。实验如下:

[root@localhost ~]# yum -y remove httpd \#卸载RPM包默认安装的apache服务,避免对实验产生影响(在生产服务器上慎用yum卸载,因为这有可能造成服务器崩溃) [root@localhost ~]# service httpd start httpd:未被识别的服务 \#因为服务被卸载,所以service命令不能识别httpd服务

\#安装源码包的apache服务 [root@localhost ~]# /usr/local/apache2/bin/apachect1 start [root@localhost ~]# netstat -tlun | grep 80 tcp 0 0 :::80 :::* LISTEN \#启动源码包安装的apache服务,查看端口确定已经启动

[root@localhost ~]# ln -s /usr/local/apache2/bin/apachectl /etc/±nit.d/apache \#service命令其实只是在/etc/init.d/目录中查找是否有服务的启动脚本,所以我们只需要做一个软链接,把源码包的启动脚本链接到/etc/init.d/目录中,就能被service命令所管理了。为了照顾大家的习惯,我把软链接文件命名为apache,注意这不是RPM包默认安装的apache服务 [root@localhost ~]# service apache restart \#虽然RPM包默认安装的apache服务被卸载了,但是service命令也能够生效

[root@localhost ~]# vi /etc/init.d/apache \#修改源码包安装的apache服务的启动脚本(注意此文件是软链接,所以修改的还是源码包启动脚本) \#!/bin/sh \# \#chkconfig: 35 86 76 \#指定httpd脚本可以被chkconfig命令所管理 \#格式是:chkconfig:运行级别 启动顺序 关闭顺序 \#这里我们让apache服务在3和5级别中能被chkconfig命令所管理,启动顺序是S86,关闭顺序是K76 \#(自定顺序,不要和系统中已有的启动顺序冲突) \#description: source package apache \#说明,内容随意 \#以上两句话必须加入,才能被chkconfig命令所识别 ...省略部分输出... [root@localhost ~]# chkconfig --add apache \#让chkconfig命令能够管理源码包安装的apache服务 [root01ocalhost ~]# chkconfig --list | grep apache apache 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭 \#很神奇吧,虽然RPM包默认安装的apache服务被删除了,但是chkconfig命令可以管理源码包安装的tapache服务

#ntsysv 命令其实和 chkconfig 命令使用同样的管理机制,也就是说,ntsysv 已经可以进行源码包安装 apache 服务的自启动管理了,如图 1 所示

图 1 ntsysv 命令识别 apache

总结一下,如果想让源码包服务被service命令所识别和管理,则只需做一个软链接把启动脚本链接到 /etc/init.d/ 目录中即可。要想让源码包服务被 chkconfig 命令所是被,除了需要把服务的启动脚本链接到 /etc/init.d/ 目录中,还要修改这个启动脚本,在启动脚本的开头加入如下内容:

#chkconfig:运行级别 启动顺序 关闭

#description:说明

然后需要使用"chkconfig–add 服务名"的方式把服务加入 chkconfig 命令的管理中。命令格式如下:

[root@localhost ~]# chkconfig [选项][服务名]

选项:

-add:把服务加入 chkconfig 命令的管理中;

-del:把服务从 chkconfig 命令的管理中删除;

例如:

14.5 Linux源码包服务管理

[root@localhost ~]# chkconfig -del httpd \#把apache服务从chkconfig命令的管理中删除

Apache Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:XSS跨站脚本攻击及漏洞防御
下一篇:轻松学DDD之二:如何高效消化知识
相关文章