六、Linux系统服务管理
1、什么是服务?
- 服务指的是各种应用程序。
- 当我们安装操作系统的时候,当操作系统安装完毕后,系统就会已经自动安装了一些基础服务,也就是系统自带的服务,来完成一些基础功能。后来,我们又安装的比如,qq聊天工具、视频播放器、nginx web服务、mysql数据库服务等应用程序,也是一些服务。
- 小结:服务就是你机器上的应用程序,这些应用程序也称软件。这些软件又分默认软件(就是系统开机后自动运行的一些服务)、基础软件(就是你电脑提供的基础服务)、应用软件(你自己后来又安装的程序)等。但是这些分类都是为了更加清晰的说明什么是软件,其实它们之间没有明显的界限。
- 有服务就得有服务管理,比如启停服务、开机自启等操作,就是服务管理。
(1)先看一下windows的服务管理
- win+r, 进入cmd输入services.msc
- 服务是指系统上,安装的各种软件提供的服务。 比如,windows提供的wifi功能,就是你的物理机先配置上网卡这个硬件,然后你的机器上安装网卡驱动这个软件,你的机器就有了你可以用的wifi功能。只要你拔了网卡或者删除了网卡驱动软件,你的wifi服务都不能提供了。wifi服务是一个基础服务,所以你在安装windows os的时候,就已经自动安装了网卡驱动服务了,不需要你重新安装。
- 一个操作系统中,有N多内置的基础服务,比如wifi、有线、蓝牙、音频等等。
- 服务的管理:比如启停管理,假如你在win下安装了mysql服务,你要启动这个服务,一是,你可以在win的cmd终端,用命令启动。二是,你可以将mysql服务,注册到win提供的可视化页面中,然后点击启动、关闭等操作。当你把mysql服务注册到win的可视化页面中,下图中就会出现这个服务的相关信息。你只要点击就可以进行相关设置。
- 自有服务
服务是一些特定的进程,自有服务就是系统开机后就自动运行的一些进程。一旦客户发出请求,这些进程就自动为他们提供服务,win系统中,把这些自动运行的进程称为'服务'。
(2)linux的服务管理
- linux的服务管理是通过命令:systemctl来实现的。
- 语法是: systemctl start/stop/restart/reload/enable/disable/is_enabled/status 服务名称
start,启动服务
stop,停止服务
restart,重启服务,就是先执行stop然后再执行start。
reload,重新加载服务
enable, 开机自启,就是持久化启动。
disable, 禁止开机自启。
is_enabled, 查询服务是否是开机自启的。
status, 查询服务的当前状态。
2、详解systemctl命令
-
什么是命令?命令是干嘛的?linux的命令大多数都是去机器上找到某个文件,然后读取文件配置,完成加载功能。
-
systemctl命令是centos7对,centos6提供的service和chkconfig两个命令,整合而来的。
-
service命令是怎么运行的?
旧的service命令默认是去/etc/init.d/目录下寻找服务管理脚本文件。假如你敲的命令是service network start,那么就是去/etc/init.d中找到network这个文件,start是参数,就是加载network这个文件的时候传入start参数。当然你敲service network stop命令,就表示传入stop参数。 -
如果你电脑上有的应用程序不是安装os时自带的,是你后期安装的,而且没有启停脚本,此时你就得自己写一个启停脚本,然后放到/etc/init.d/nginx,然后你就可以调用service xxx start命令了。而且这个命令也等价于:/etc/init.d/xxx start ,就是文件名加参数的写法,也就是用脚本去启动xxx服务。
- systemctl命令是怎么运行的呢?
centos7的脚本目录以及语法,和centos6都不一样,centos7系统默认的是去/etc/rc.d/init.d/这个目录里寻找服务管理脚本:
目录/etc/rc.d/init.d/是centos7系统默认的所有服务,管理脚本的存放目录,以及你自己安装了某软件,也可以放入到这个目录下,你就可以通过systemctl start/stop 服务名 去管理了。
但是不管是service还是systemctl命令,它都是去找一个脚本,然后传入你的参数。
- systemctl统一管理脚本目录还可以在/usr/lib/systemd/system/目录下面
我虚拟机上的nginx是通过yum install nginx -y 安装的。 - 凡是通过yum安装的程序,会自动生成nginx管理脚本,自动在systemctl管理脚本目录下:
所以我们运行nginx,有2种方式:一是直接运行二进制指令,二是用systemctl,以服务管理模式运行。
说明:凡是通过yum安装的工具,该软件自动就有systemctl脚本可以管理,就是该工具可以通过systemctl start xxx,stop xxx,restart xxx等操作。但是如果你启动该工具的时候,你用的是二进制命令直接启动的,那此时systemctl就不能帮你管理该工具了,此时你用systemctl status xxx,就显示inactive。就是你即使ps -ef|grep xxx的时候,xxx是存在的,systemctl status xxx还是显示不存在的。这是因为当你systemctl start xxx的时候,就生成一个进程,这个进程再生成一个进程去运行xxx程序,所以当你的xxx程序就不是systemctl命令的进程产生的,那systemctl自然不知道你启动没启动xxx程序了。
- 再看ssh远程连接服务,ssh是提供远程连接的软件
假如让你去启停一个软件,你第一步得ps -ef|grep 服务名, 然后再kill pid就非常麻烦。通过systemctl去管理服务,服务背后涉及的命令、文件、路径就都不用记忆了。
- 小结:
(1)查服务的进程:ps -ef | grep xxx
(2)查服务的端口号:netstat -tnlp |grep xxx
(3)查服务运行的文件,就是一个软件文件,一个软件之所以能运行,就是这个软件的文件:which xxx
(4)查服务的配置文件,就是软件的配置文件:(3)返回的文件目录 -t 就是检查软件的配置文件语法是否正确。
(5)你敲systemctl命令,系统就去/usr/lib/systemd/system/目录下面去找哪个服务的.service文件,并传入你敲命令带的参数,来执行.service文件。而执行.service文件,就是start\stop\restart\status等这个服务的可执行文件,而服务的可执行文件一般放在/usr/sbin/目录里面,服务的配置文件一般放在/etc/服务名/服务名.conf文件。
3、network服务
network是管理网络的软件,管理你电脑的上网方式。有了network服务你的网就通了,就可以上网了。前面讲systemctl命令的时候也老用这个服务举例,但是这里要详细讲一下network服务与vmware的通信流程。
一台电脑可以上网:
一是,检查硬件。你电脑要有网卡有软驱,并且网卡插上了网线。当然也可以是无线的。这是第一步,和硬件相关。但是这里我们的电脑是vm虚拟出来的,有虚拟的网卡和驱动,那现在要看这个虚拟机是否插网线了,图A。
二是,检查软件。进入你电脑的系统,查看你的网络软件配置环境。在/etc/sysconfig/network-scripts,就是网卡脚本目录中,看图B。
三是,编辑你的网卡配置文件。看图C。
上面的配置文件ifcfg-ens33里面的内容具体怎么改?为啥要这样改,你还需要明白宿主的上网流程,以及虚拟机、vmware、宿主机之间的通信流程:
你的电脑之所以能上网,除了你电脑本身有硬件网卡、软件驱动,你的外部还需要有路由器、有网线或者有无线wifi。当外部网线和你的网卡接通了后,软件的作用就是:比如设置你的连接模式、生成你的ip等,而这些操作不仅和你自己内部有关还和外部有关。所以你首先要先查看一下你的路由设置,也就是你的网关设置,下图就是查看方法和设置方法。
这是你的外部网络环境。
然后你再看你自己电脑内部的网络环境:首先,你先看看你的vm虚拟网卡的网络环境,如果你是桥接模式,就表示,你这台虚拟机要去你路由器设置的网段里面拿走一个ip,等于你的路由器下面多了一个电脑设备。那你的上网过程就是:假如你虚拟机从路由设置中用掉的ip地址是192.168.0.134,那上网过程就是192.168.0.134>>>路由器地址>>>公网,这么一个过程。这个过程和你实体的宿主机的上网过程是一样的。由于现在的设备太多,ip不够用,所以我们自己电脑一般也是nat模式,所以在这个过程中,你家的路由器的作用就是帮你做NAT地址转换,就是把你运营商的公网ip转换为你的路由器局域网ip。
如果你的虚拟机网卡是NAT模式,网络地址转换模式,这种模式有一个ip地址映射表。就是此时linux就会生成一个新的局域网网段,假如是192.168.100.xxx,那你的虚拟机的ip就可以设置从192.168.100.2-254这个范围,随便设,因为1和255一般有它用。然后你虚拟机的上网过程就是192.168.100.2-254>>>你的虚拟网关>>>192.168.0.134你的宿主机>>>你家里的路由器>>>公网。其中ip地址映射表是解决192.168.100.2-254>>>你的虚拟网关>>>192.168.0.134之间的映射关系的。
所以ifcfg-ens3文件的修改点是:
通过上面信息的查看,你先确认你所在的网络环境、确认你的网关。
1、把你虚拟机的动态ip改成静态ip,也就是BOOTPROTO从dhcp改成static。
2、写入你的虚拟的静态ip地址、ip掩码地址、虚拟的网关地址、dns服务器地址。
四是,禁用centos7在图形化下设置的网络服务,同时管理wifi和有线。这个服务名叫NetworkManager, 看图D。 五是,启动你电脑的管理网络的服务。
由于我们上面修改了网络配置文件ifcfg-ens33,只要修改了配置文件,就得重启服务。看图E。
六是,测试网络服务是否正常。看图F。
ping通后,说明我们可以访问外网了,也表示前面我们的配置文件修改没错,我们配置的静态ip、虚拟网关都是没错的。
4、ntp时间同步服务
前面讲的ssh和network都是系统内置的服务,还有一些是我们自己安装的服务,比如npt服务。
NTP,network time protocol, 网络时间协议。用来同步网络中各个计算机的时间的协议。就是用来使网络中的各个计算机的时间都同步,在局域网中时间精度可达0.1ms。互联网中绝大多数地方的时间精度可达1-50ms。
标准时间是由原子钟报时的国际标准时间UTC,universal time coordinated提供。通常我们是直接使用各个组织提供的现成的NTP服务器。中国地区,我们到这个网址全球可用的NTP服务器列表与解析服务 - ntp.org.cn & ntpdate.net 查看:
这是全世界的服务器的时间标准。我们只要和这些节点的时间同步,我们就和全世界的电脑的时间都同步。
(1)修改时间的命令:
timedatectl:修改linux的日期和时间。
前面我们讲了centos7提供的systemctl命令相当于centos6提供的service+chkconfig。
同理,timedatectl相当于date命令+hwclock命令
date:修改软件的时间日期。就是你的系统运行了,程序计算的时间。
hwclock:修改硬件的时间日期。就是你计算机主板上的BISO系统+纽扣电池,给提供的硬件时间。
所以,软硬件的时间我们统一用timedatectl命令来操作。
- 设置或查询系统时间、日期、时区等配置
centos6:
修改时间、日期:data命令
修改时区:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ,拷贝前面的文件,生成你自己本地的时区文件
修改硬件时间:hwclock命令
- 同步时间
同步时间有两个方法,第一种是用ntpdate命令校准时间,第二种是搭建ntpd服务。
ntpdate命令是直接调整时间,一次性改变时间,这种暴力操作没有考虑到其他程序对时间的依赖,比如根据时间执行备份动作的脚本,或者一些监控程序,所以有时候会导致很严重的问题。而且,update也是找一台ntp时间服务器去强制立即更新时间的,比如ntpdate -u times.aliyun.com 这条命令就是找aliyun的时间服务器去强制同步。如果有人恶意同步到一台恶意的时间服务器上,就可能会令其执行某些消耗性的任务,后果是很严重的。所以企业服务器一般会部署ntpd服务,让服务器自动定期的进行时间同步,并且以公共时间服务器池为准,保证服务器集群的时间正确且一致。
而我们搭建ntpd服务同步时间,是一点点校准时间的,比如说每隔60秒同步一下,并且也同步到BIOS硬件时间,最终慢慢的把时间校准了。
和搭建linux其他服务一样,搭建NTP服务也是:一是安装,二是改配置,三是启动,四是使用。以后就是继续改配置-重新加载-重启-继续使用。
原理是:当一台linux的时间不准的话,我们就在这台机器上搭建一个ntp服务,这个ntp服务有一个配置文件/etc/ntp.conf,在这个配置文件里面我们把文件中的信息改成阿里云的ntp时间服务器地址即可。
说明:在修改配置文件的时候,一般情况下,井号后面的东西都是解释性的说明;白色的行,一般前面是关键字后面是值,我们一般改的都是后面的值。当然具体怎么改,你要去软件的官网看说明,看人家都给了你哪些参数、哪些关键字让你用。
- 让软件和硬件的时间同步
- 小结:
- ntp客户端的运行流程
上面讲的是ntp服务怎么在服务端搭建,下面看看客户端怎么使用
待续。。。。