14.3 独立服务管理(RPM包的启动与自启动)
- RPM 包默认安装的服务分为独立的服务和基于 xinetd 的服务。
14.3.1 独立服务的启动管理
- 独立的服务要想启动,主要有两种方法。
-
- 使用/etc/init.d/目录中的启动脚本来启动独立的服务,既然所有独立服务的启动脚本都存放在 /etc/init.d/ 目录中,那么,调用这些脚本就可以启动独立的服务了。这种启动方式是推荐启动方式,命令格式如下:
[root@localhost ~]#/etc/init.d独立服务名 start| stop|status|restart|...
-
参数:
- start:启动服务;
- stop:停止服务;
- status:查看服务状态;
- restart:重启动服务;
-
我们以启动 RPM 包默认安装的 bt服务为例,命令如下:
[root@CncLucZK ~]# ll /etc/init.d/
total 36
-rwxr-xr-x 1 root root 11257 Oct 19 13:30 bt
-rw-r--r--. 1 root root 18325 Aug 3 2018 functions
-rw-r--r--. 1 root root 1161 Jul 21 2020 README
[root@CncLucZK ~]# /etc/init.d/bt start
Starting Bt-Panel... Bt-Panel (pid 920) already running
Starting Bt-Tasks... Bt-Tasks (pid 878) already running
#查询bt服务状态,并能够看到bt服务的PID
[root@CncLucZK ~]# /etc/init.d/bt status
Bt-Panel (pid 920) already running
Bt-Task (pid 878) already running
- 2.使用service命令来启动独立的服务:在 CentOS 系统中,我们还可以依赖 service 命令来启动独立的服务。service 命令实际上只是一个脚本,这个脚本仍然需要调用 /etc/init.d/ 中的启动脚本来启动独立的服务。而且 service 命令是红帽系列 Linux 的专有命令,其他的 Linux 发行版本不一定拥有这条命令,所以我们并不推荐使用 service 命令来启动独立的服务。
- service 命令比输入 /etc/init_d/ 目录要稍微简单。service 命令还可以查看所有独立服务的启动状态,这是一个常用功能,命令格式如下:
[root@localhost ~]# service 独立服务名 start|stop|restart|...
[root@localhost ~]# service --status -all
- 选项:
- –status -all:列出所有独立服务的启动状态;
[root@CncLucZK ~]# service bt restart
Stopping Bt-Tasks... done
Stopping Bt-Panel... done
Starting Bt-Panel.... done
Starting Bt-Tasks... done
[root@CncLucZK ~]# service --status-all
Bt-Panel (pid 2153933) already running
Bt-Task (pid 2153907) already running
- 随着 bt服务的启动和停止,使用”netstat -tlun”命令就会看到 8888 端口出现和消失。这也就说明 bt服务绑定的口就是 8888,所以我们可以端口是否在服务器中出现来判断 bt服务是否启动。
14.3.2 独立服务的自启动管理
-
自启动指的是在系统之后,服务是否随着系统的启动而自动启动。启动命令只负责启动服务,而和服务的自启动完全没有关系。同样地,自启动命令只管服务是否会在系统重启之后启动,而和当前系统中的服务是否启动没有关系。独立服务的自启动方法有三种。
-
1.使用 chkconfig 服务自启动管理命令:第一种方法是利用 chkconfig 服务自启动管理命令来管理独立服务的自启动,这条命令的用法如下:
[root@localhost ~]# chkconfig --list
- 使用 chkconfig 命令除了可以查看所有 RPM 包默认安装服务的自启动状态,也可以修改和设置 RPM 包默认安装服务的自启动状态,只是独立的服务和基于 xinetd 的服务的设定方法稍有不同。我们先来看看独立的服务如何设置。命令格式如下:
[root@localhost ~]# chkconfig [--level 运行级别][独立服务名][on|off]
- 选项:
- –level: 设定在哪个运行级别中开机自启动(on),或者关闭自启动(off);
[root@CncLucZK ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
bt 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#查询bt的自启动状态
xinetd based services:
chargen-dgram: off
chargen-stream: off
daytime-dgram: off
daytime-stream: off
discard-dgram: off
discard-stream: off
echo-dgram: off
echo-stream: off
tcpmux-server: off
time-dgram: off
time-stream: off
#设置bt服务在进入1,6级别时自启动
[root@CncLucZK ~]# chkconfig --level 16 bt on
[root@CncLucZK ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
bt 0:off 1:on 2:on 3:on 4:on 5:on 6:on
...
-
Linux 中,如果在 0~6 这 7 个运行级别中服务都显示”关闭”,则该服务不自启动。如果在某个运行级别中显示”启用”,则代表在进入这个运行级别时,该服务开机自启动。
-
服务的自启动方法和服务的启动方法是不通用的,我们做一个实验验证一下。命令如下:
#将bt服务停止 [root@CncLucZK ~]# service bt stop Stopping Bt-Tasks... done Stopping Bt-Panel... done #查询bt服务状态,是已经停止的 [root@CncLucZK ~]# service bt status Bt-Panel not running Bt-Task not running #查看bt服务的自启动状态,自启动都已经生效 [root@CncLucZK ~]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. bt 0:off 1:on 2:on 3:on 4:on 5:on 6:on #但是bt服务在当前系统中还是关闭的
虽然 bt 被设置为自启动,但是当前系统中的 bt 是没有启动的,所以启动和自启动是独立的。
-
2.修改 /etc/rc.d/rc.local 文件,设置服务自启动.在此文件中加入服务的启动命令。这个文件是在系统启动时,在输入用户名和密码之前最后读取的文件(注意:/etc/rc.d/rc.loca和/etc/rc.local 文件是软链接,修改哪个文件都可以)。这个文件中有什么命令,都会在系统启动时调用。
-
如果我们把服务的启动命令放入这个文件,这个服务就会在开机时自启动。命令如下:
[root@CncLucZK ~]# vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/etc/rc.d/init.d/bt start
#在文件中加入bt的启动命令
-
这样,只要重启之后,bt服务就会开机自启动了。推荐大家使用这种方法管理服务的自启动,有两点好处:
- 第一,如果大家都采用这种方法管理服务的自启动,当我们碰到一台陌生的服务器时,只要查看这个文件就知道这台服务器到底自启动了哪些服务,便于集中管理。
- 第二,chkconfig 命令只能识别 RPM 包默认安装的服务,而不能识别源码包安装的服务。 源码包安装的服务的自启动也是通过 /etc/rc.d/rc.local 文件实现的,所以不会出现同一台服务器自启动了两种安装方法的同一个服务。
注意一下,修改 /etc/rc.d/rc.local 配置文件的自启动方法和 chkconfig 命令的自启动方法是两种不同的自启动方法。所以,就算通过修改 /etc/rc.d/rc.local 配置文件的方法让某个独立的服务自启动了,执行”chkconfig –list”命令并不到有什么变化。
-
3.使用 ntsysv 命令管理自启动,该命令调用窗口模式来管理服务的自启动,非常简单。
[root@localhost ~]# ntsysv [--level 运行级别]
- 选项:
- –level 运行级别:可以指定设定自启动的运行级别;
[root@CncLucZK ~]# ntsysv --level 235
#只设定2、3、5级别的服务自启动
[root@CncLucZK ~]# ntsysv
#按默认的运行级别设置服务自启动
- 执行命令后,会和 setup 命令类似,出现命令界面
- 这个命令的操作是这样的:
- 上下键:在不同服务之间移动;
- 空格键:选定或取消服务的自启动。也就是在服务之前是否输入”*”;
- Tab键:在不同项目之间切换;
- F1键:显示服务的说明;
注意,ntsysv 命令不仅可以管理独立服务的自启动,也可以管理基于 xinetd 服务的自启动。也就是说,只要是 RPM 包默认安装的服务都能被 ntsysv 命令管理。但是源码包安装的服务不行。
这样管理服务的自启动多么方便,为什么还要学习其他的服务自启动管理命令呢? ntsysv 命令虽然简单,但它是红帽系列 Linux 的专有命令,其他的 Linux 发行版本不一定拥有这条命令,而且条命令也不能管理源码包安装的服务,所以我们推荐大家使用 /etc/rc.d/rc.local 文件来管理服务的自启动。
14.4 基于xinetd服务的管理方法
-
基于 xinetd 的服务同样有启动管理和自启动管理之分,而且不管是启动管理还是自启动管理,都只有一种方法,相比独立的服务简单一些。
-
基于 xinetd 的服务:没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法是一致的。但是,所有基于 xinetd 这个超级守护进程的其他服务就不是这样的了,必须修改该服务的配置文件,才能启动基于 xinetd 的服务。所有基于 xinetd 服务的配置文件都保存在 /etc/xinetd.d/ 目录中。如:Telnet 服务是用来进行系统远程管理的,端口是 23。不过需要注意的是,Telnet 服务的远程管理数据在网络中是明文传输的,非常不安全,所以在生产服务器上是不建议启动 Telnet 服务的。在生产服务器上,远程管理使用的是 ssh 协议,ssh 协议是加密的,更加安全。Telnet 服务也是分为”客户端/服务器端”的,其中服务器端是用来启动 Telnet 服务的,并不安全;客户端是用来连接服务器端或测试服务器的端口是否开启的,在实际工作中我们主要使用 Telnet 客户端来测试远程服务器开启了哪些端口。
-
客户端的命令格式如下:
[root@localhost ~]# telnet 服务器 IP
#连接并管理远程服务器,因为数据明文传输,所以不安全
[root@localhost ~]# telnet 服务器IP 端口
#测试远程服务器的端口是否开启。如果能够正常连接,则证明该端口是开启的
[root@CncLucZK ~]# telnet 192.168.98.128 22
#测试一下192.168.98.128这台服务器上的22(ssh服务)端口是否打开
#连接成功后,退出时使用"Ctrl+]"快捷键回到telnet交互模式,再输入"quit"退出
- 虽然 Telnet 服务不安全,但 Telnet 服务是基于 xinetd 的服务,使用 Telnet 服务来学习一下基于 xinetd 服务的启动管理。在目前的 Linux 系统中,Telnet 的服务器端都是不安装的,如果进行测试,则需要手工安装。安装命令如下:
[root@CncLucZK ~]# rpm -q telnet
package telnet is not installed
[root@CncLucZK ~]# yum -y install telnet
...
Installed:
telnet-1:0.17-76.el8.x86_64
[root@CncLucZK ~]# chkconfig --list
#安装之后查询一下
- 启动 Telnet 服务了。既然基于 xinetd 服务的配置文件都在 /etc/xinetd.d/ 目录中,那么 Telnet 服务的配置文件就是 /etc/xinetd.d/telnet。我们打开这个文件看看,如下:
[root@CncLucZK ~]#vi /etc/xinetd.d/telnet
#default: on
#description: The telnet server serves telnet sessions; it uses \
#unencrypted username/password pairs for authentication.
service telnet
#服务的名称为telnet
{
flags = REUSE
#标志为REUSE,设定TCP/IP socket可重用
socketjtype = stream
#使用 TCP协议数据包
wait = no
#允许多个连接同时连接
user = root
#启动服务的用户为root
server = /usr/sbin/in.telnetd
#服务的启动程序
log_on_failure += USERID
#登录失败后,记录用户的ID
disable = yes
#服务不启动
}
- 想要启动 Telnet 服务,则只需要把 /etc/xinetd.d/telnet 文件中的”disable=yes”改为”disable=no”即可,”disable”代表取消,”disable=yes”代表取消是 yes,当然不启动服务;”disable=no”代表取消是 no,当然就是启动服务了。具体命令如下:
[root@CncLucZK ~]#vi /etc/xinetd.d/telnet
#修改配置文件
service telnet {
…省略部分输出…
disable = no
#把 yes 改为no
}
[root@CncLucZK ~]# service xinetd restart
#重启xinetd服务
停止 xinetd:
[确定]
正在启动xinetd:
[确定]
[root@CncLucZK ~]# netstat -tlun|grep 23
tcp 0 0 :::23 :::* LISTEN
#查看端口,23端口启动,表示Telne服务已经启动了
基于 xinetd 服务的启动都是这样的,只需修改 /etc/xinetd.d/ 目录中的配置文件,然后重启 xientd 服务即可。
- 基于 xinetd 服务的自启动管理有两种方法,分别是通过 chkconfig 命令管理自启动和通过 ntsysv 命令管理自启动。但是不能通过修改 /etc/rc.d/rc.local 配置文件来管理自启动,因为基于 xinetd 的服务没有自己的启动脚本程序。我们分别来看看。
- 使用 chkconfig 命令管理自启动:可以管理所有 RPM 包默认安装的服务,所以也可以用来管理基于 xinetd 服务的自启动。命令格式如下:
[root@CncLucZK ~]# chkconfig 服务名 on|off
#基于xinetd的服务没有自己的运行级别,而依靠xinetd服务的运行级别,所以不用指定--level选项
[root@CncLucZK ~]# chkconfig telnet on
#启动Telnet服务的自启动
[root@CncLucZK ~]# chkconfig --list|grep telnet
telnet:启用
#查看服务的自启动,Telnet服务变为了"启用"
[root@CncLucZK ~]# chkconfig telnet off
#关闭Telnet服务的自启动
[root@CncLucZK ~]# chkconfig --list|grep telnet
telnet:关闭
#查看服务的自启动,Telnet服务变为了 "关闭"
- 使用 ntsysv 命令管理自启动:既可以管理所有 RPM 包默认安装的服务,也能管理基于 xinetd 的服务。命令的使用方法和管理独立的服务是一样的.基于 xinetd 服务的启动和自启动区分得并不严格。启动命令也会把服务设置为自启动,自启动命令也会把服务设置为启动。
[root@CncLucZK ~]# vi /etc/xinetd.d/telnet service telnet #关闭telnet服务
{
disable = yes
...省略部分输出...
}
[root@CncLucZK ~]# service xinetd restart
停止xinetd: [确定]
正在启动xinetd: [确定】
[root@localhost ~]# chkconfig telnet off #关闭telnet自启动
#先关闭Telnet服务的启动和自启动,保证不会对后面的实验产生影响
[root@CncLucZK ~]# vi /etc/xinetd.d/telnet service telnet #仅开启telnet服务
{
disable = no
...省略部分输出...
}
[root@CncLucZK ~]# service xinetd restart
停止xinetd: [确定]
正在启动xinetd: [确定】
#然后启动Telnet服务
[root@CncLucZK ~] # chkconfig --list | grep telnet
telnet:启用
把Telnet服务的自启动关闭了。后面的实验虽然只启动了#Telnet服务,但是该服务自动变为了自启动状态
说明了基于 xinetd 服务的启动和自启动命令之间是通用的,在当前系统中启动了服务,服务的自启动也会开启;关闭了服务的自启动,当前系统中的服务也会关闭。
参考文献:
Linux独立服务管理(RPM包的启动与自启动)
下一篇:Linux学习-63-源码包服务管理方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123729.html