说明:本篇博客篇幅较长,但其中的实质内容并不多;所以,本篇博客快速浏览为佳。


目录

一:应用服务化简介

1.为什么需要应用服务化?

2.应用服务化简介

3.应用服务化的核心命令:【systemctl】及其子指令

二:案例:CentOS中将redis配置成系统服务

1.第一步:手动启动redis,并确定redis.pid文件的存在

2.第二步:在【/usr/lib/systemd/system】目录下,创建并编写redis的服务描述文件:redis.service

3.第三步:重载【/usr/lib/systemd/system】目录下的.service,让【redis服务描述文件】生效

至此,redis的服务化,就算是设置好了;然后,我们就可以使用服务化的systemctl及其子命令,来对redis这个应用进行各种操作了。

应用服务演示一:systemctl start redis:启动redis服务

应用服务演示二:systemctl status redis:查看启动后的redis状态

应用服务演示三:systemctl stop redis:关闭redis服务

应用服务演示四:systemctl restart redis:重启redis服务

应用服务演示五:systemctl enable redis:设置redis开机自启

应用服务演示六:systemctl is-enabled redis:查看redis,是否已经设置为了自启动

验证【自启动】:设置为redis自启动后,可以shutdown -r now重启系统,验证一下

应用服务演示七:systemctl disable redis:设置redis开机不自启

验证【不自启动】:设置为redis不自启动后,可以shutdown -r now重启系统,验证一下

应用服务演示八:systemctl list-unit-files:查看当前系统中,所有的服务的当前状态

如Tomcat,redis,MySQL这种重要的中间件,就可以把其设置为系统服务,这样以后就可以借由systemctl及其子命令,对其进行统一管理,然后也可以设置其为自启动;


一:应用服务化简介

1.为什么需要应用服务化?

以为redis为例,阐述如下内容:

痛点一:在Linux系统中安装redis后,启动redis、关闭redis、重启redis,都需要去redis的源代码目录,手动去调用文件:挺麻烦的!!!

redis服务器配置 redis设置为服务_redis服务器配置

痛点二:而且,安装了redis后,我们可以通过在redis安装文件目录中,手动执行【./src/redis-server redis.conf】,去加载redis.conf,启动redis;但是,当我们关闭Linux系统或者重启Linux系统时候,redis都是自动被关闭了的;然后,如果我们还想启动redis,任然需要手动执行【./src/redis-server redis.conf】;手动启动redis,这么做当然是可以的,但是在实际中,一家公司的服务器有很多台,如果每台服务器重启后都要手动去启动redis,这个工作量太大。为此,就可以将redis进行服务化,这样以后redis就会随着系统的启动而自动启动,就不需要我们手动去启动redis了。 

redis服务器配置 redis设置为服务_应用服务_02

说白了有两个重要的痛点:(1)redis需要手动的去redis源代码目录,进行各种管理;(2)redis无法跟随Linux系统启动而自启动;

而,把redis设置成系统服务,就可以解决这个两个痛点。

……………………………………………………

2.应用服务化简介

redis服务器配置 redis设置为服务_redis_03

(1)应用服务化在Windows中也存在;

(2)应用服务化的好处:通过简单的命令,就可以列出目前系统中正在运行那些服务,以及这些服务的工作状态如何,也可以通过服务管理命令对这些服务进行管理;

(3)应用服务化的核心命令:systemctl(System Control:系统控制);

          ● 在把一个应用设置成应用服务化的过程,需要大量的调用systemctl命令;

          ● 在把一个应用设置成应用服务化的过程,也可通过调用systemctl命令,来管理这个应用;

(4)【把一个应用程序以为服务的方式在后台运行】,也可以称作【把这个应用配置成系统服务】;

……………………………………………………

3.应用服务化的核心命令:【systemctl】及其子指令

【systemctl及其子指令】 要明确两点:

          ● 【在将一个应用设置成系统服务】的过程中,需要使用【systemctl及其子指令】;

          ● 【已经把一个应用设置成了系统服务后】,依旧可以使用【systemctl及其子指令】来管理这个应用;

systemctl是一个核心的命令,其涉及到了很多子指令:这些是在日常开发中,所使用到的systemctl的常用命指令;这些指令都是针对服务的;

redis服务器配置 redis设置为服务_自启动_04


二:案例:CentOS中将redis配置成系统服务

该案例以【redis的服务化设置】为例;

1.第一步:手动启动redis,并确定redis.pid文件的存在

启动redis后,确认redis是否有pid文件: 主要目的是:获取redis的pid文件的全路径

redis服务器配置 redis设置为服务_应用服务_05

redis服务器配置 redis设置为服务_redis服务器配置_06

然后,这儿可以顺便看下pid文件的内容:  

redis服务器配置 redis设置为服务_redis_07

redis服务器配置 redis设置为服务_redis_08

redis服务器配置 redis设置为服务_redis_09

说明:

(1) redis的pid文件【redis_6379.pid】,是一个标识,保存的是当前进程的编号;如果,我们在redis服务化以后,在redis进行重启或者是关闭的时候,需要从redis的pid文件【redis_6379.pid】中读取进程编号,对其进行kill杀进程的操作;

(2)在确认了redis的pid文件【redis_6379.pid】的文件名和路径后,就可以进行后续的动作了;

(3)在配置redis为系统服务的过程中,是否需要在redis已经被手动启动的情况下设置,尚不明确;反正,自己在设置的时候,是在redis被手动启动的情况下设置的,然后也设置OK了;(这一点,待确认吧)。。。。。即经过实测,有一点是明确的,redis没有启动的时候,在run目录下,是没有redis_6379.pid文件;;;;;;

……………………………………………………

2.第二步:在【/usr/lib/systemd/system】目录下,创建并编写redis的服务描述文件:redis.service

切换到system目录:

cd /usr/lib/systemd/system

redis服务器配置 redis设置为服务_redis_10

查看system目录下的内容;可以看到该目录下的很多文件都是.service文件,这些是服务描述文件;

在system目录下,创建redis.service: 

这儿是通过vim命令直接创建的; 

vim redis.service

 如果想将redis进行服务化,需要在system目录中,创建一个redis的.service文件,这个.service文件的文件名就是服务名;

redis服务器配置 redis设置为服务_应用服务_11

redis服务器配置 redis设置为服务_redis_12

 在redis.service中编写如下内容:

[Unit] Description=Redis After=syslog.target network.target remote-fs.target nss-lookup.target [Service] #Type=forking PIDFile=/run/redis_6379.pid ExecStart=/usr/local/redis-4.0.14/src/redis-server /usr/local/redis-4.0.14/redis.conf ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

redis服务器配置 redis设置为服务_redis服务器配置_13

说明:

(1)第一个配置项[Unit]

redis服务器配置 redis设置为服务_自启动_14

          ●【Description=Redis】:这是个描述信息,来说明当前的服务是做什么的;这一项,纯粹是给读者看的;

          ●【After=syslog.target network.target remote-fs.target nss-lookup.target】:After是“什么什么之后的意思”,后面跟了很多系统服务;这儿的意思是,要在【syslog.target network.target remote-fs.target nss-lookup.target】这些服务启动后,才允许启动redis服务;这些服务,暂时不需要过度了解;以后,在设置其他应用程序的时候,这儿固定这样能写就行;

(2)第二个配置项【Service】

redis服务器配置 redis设置为服务_应用服务_15

PS:这儿注释掉了,因为,我们不要在redis的服务文件中,将redis设置为默认后台运行;;;;而是后面将redis设置为系统服务后,可以通过systemctl命令,可以随时任性的设置redis是否是后台运行

          ●【PIDFile=/run/redis_6379.pid】:这一项指向的,就是描述redis程序进程编号的pid文件;

redis服务器配置 redis设置为服务_redis_16

          ●【ExecStart=/usr/local/redis-4.0.14/src/redis-server /usr/local/redis-4.0.14/redis.conf】:这一项,表示服务启动时使用什么命令。这儿需要书写应用程序的完整路径;

redis服务器配置 redis设置为服务_redis服务器配置_17

          ●【ExecStop=/bin/kill -s QUIT $MAINPID】:这一项,表示关闭服务,使用什么命令。使用,kill命令,关闭指定进程,而这个进程是个$变量,其具体值来自于redis的pid文件【redis_6379.pid】中的那个进程编号;即,在实际运行时,其会把【PIDFile=/run/redis_6379.pid】中的值代入到【$MAINPID】上;【-s QUIT】表示按照正常的流程,通知指定的进程去关闭应用,以前接触过【kill -9】;-9是比较粗暴的做法,是强制的删除进程,就行是直接拔电源一样;-s是通知进程按照正常的流程进行退出;在服务关闭时,建议使用-s,但是如果入到僵尸进程或者无法正常退出的进程,就需要使用-9了;

          ●【PrivateTmp=true】:代表为每一个服务设置私有的Tmp临时文件目录;

(3)第三个配置项【Install】:安装的配置项

          ●【WantedBy=multi-user.target】:将当前redis服务,分配到multi-user.target这个服务组上;multi-user.target是系统默认的服务组,系统为这个服务组分配了一个权限,允许multi-user.target服务组中所有的服务可以随系统启动而自动启动;即,只要把一个服务分配到multi-user.target这个服务组中,那么这个服务就可以随系统启动而自动启动了;


编写好了之后,Esc退出编辑模式,然后:wq保存并退出:然后,在system目录中,就有了redis.service这个redis的服务描述文件了;

redis服务器配置 redis设置为服务_redis服务器配置_18

……………………………………………………

3.第三步:重载【/usr/lib/systemd/system】目录下的.service,让【redis服务描述文件】生效

 使用【systemctl daemon-reload】命令,重载所有Service;

systemctl daemon-reload

redis服务器配置 redis设置为服务_自启动_19

……………………………………………………

至此,redis的服务化,就算是设置好了;然后,我们就可以使用服务化的systemctl及其子命令,来对redis这个应用进行各种操作了。

然后,我们就不用去redis的源代码目录,去操作redis了;也就是,经过上面的设置后,我们可以借由systemctl这个系统命令,从系统层面上对redis进行统一管理了。 

……………………………………………………

 进行接下来的操作前,需要把原先手动开启的redis给关掉(Ctrl+C);

……………………………………………………

应用服务演示一:systemctl start redis:启动redis服务

systemctl start redis

redis服务器配置 redis设置为服务_redis_20

…………………………………………………… 

应用服务演示二:systemctl status redis:查看启动后的redis状态

systemctl status redis

redis服务器配置 redis设置为服务_redis服务器配置_21

……………………………………………………

应用服务演示三:systemctl stop redis:关闭redis服务

systemctl stop redis

 

redis服务器配置 redis设置为服务_redis_22

 ……………………………………………………

应用服务演示四:systemctl restart redis:重启redis服务

redis服务器配置 redis设置为服务_redis服务器配置_23

……………………………………………………

应用服务演示五:systemctl enable redis:设置redis开机自启

systemctl enable redis

redis服务器配置 redis设置为服务_自启动_24

可以看到,在【multi-user.target】分组下增加了redis.service,然后其指向了我们编写的那个resis.service配置文件;我们将这个称为“软关联”,软关联类似于Windows中的快捷方式,即 【multi-user.target分组下的redis.service】就像是一个快捷方式,具体执行的时候,还是需要去/usr/lib/systemed/system目录下去加载redis.service; 

……………………………………………………

应用服务演示六:systemctl is-enabled redis:查看redis,是否已经设置为了自启动

systemctl is-enabled redis

redis服务器配置 redis设置为服务_redis服务器配置_25

……………………………………………………

验证【自启动】:设置为redis自启动后,可以shutdown -r now重启系统,验证一下

redis服务器配置 redis设置为服务_应用服务_26

redis服务器配置 redis设置为服务_redis服务器配置_27

……………………………………………………

应用服务演示七:systemctl disable redis:设置redis开机不自启

systemctl disable redis

redis服务器配置 redis设置为服务_redis服务器配置_28

然后,设置redis开机不自启后,通过【systemctl is-enables redis】命令,可以看到redis已经disabled了。

……………………………………………………

验证【不自启动】:设置为redis不自启动后,可以shutdown -r now重启系统,验证一下

redis服务器配置 redis设置为服务_redis服务器配置_29

redis服务器配置 redis设置为服务_自启动_30

……………………………………………………

应用服务演示八:systemctl list-unit-files:查看当前系统中,所有的服务的当前状态

systemctl list-unit-files

redis服务器配置 redis设置为服务_应用服务_31

 自然可以使用通道技术,筛选出目前自启动的服务:

systemctl list-unit-files | grep enabled

redis服务器配置 redis设置为服务_redis_32

 ……………………………………………………

如Tomcat,redis,MySQL这种重要的中间件,就可以把其设置为系统服务,这样以后就可以借由systemctl及其子命令,对其进行统一管理,然后也可以设置其为自启动;