本篇针对 centos6,centos7 对此有较多改动,以实际为准
# 服务简介与分类
# 服务的分类
从安装方式上来看,linux 服务分为两大类:RPM 包默认安装的服务 和 源码包安装的服务,而 RPM 包安装的服务又分为:独立的服务(服务直接在内存中,直接响应用户)和基于 xinetd 的服务(xinetd 服务本身独立在内存中,区别于 apache 服务,我们访问 xinetd 服务本身是没有任何功能的,真实服务是在掩藏在 xinnetd 服务后面的真实服务,有点类似管理服务的服务)。
# 服务启动与自启动
windows 服务有状态和启动类型,状态分为启动、停止、暂停和恢复,启动类型分为手动、自动和禁用。服务启动就是在当前系统中让服务运行,并提供功能。服务自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动服务。
# 查询已安装的服务
- 查看 RPM 包安装的服务:
chkconfig --list
,查看服务自启动状态,可以看到所有 RPM 包安装的服务。 - 查看源码包安装的服务:查看服务安装位置,一般是 /usr/local/ 下
# linux 运行级别 | |
# 0: 关机 | |
# 1: 单用户 | |
# 2: 不完全多用户 | |
# 3: 字符界面 | |
# 4: 未分配 | |
# 5: 图形界面 | |
# 6: 重启动 | |
[root@core-pods-3 ~]# chkconfig --list # 这个是查看开机自启动信息,而不是当前正在启动 | |
gwarp 0:off 1:off 2:on 3:on 4:on 5:on 6:off | |
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off | |
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off | |
qemukvmga 0:off 1:off 2:on 3:on 4:on 5:on 6:off | |
[root@core-pods-3 ~]# ps aux # 查看当前启动的 | |
[root@core-pods-3 ~]# ps aux | grep httpd | |
root 19315 0.0 0.2 112824 2348 pts/1 S+ 02:33 0:00 grep --color=auto httpd | |
root 25959 0.0 0.5 224096 6100 ? Ss Aug04 0:41 /usr/sbin/httpd -k start | |
apache 25961 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25962 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25963 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25964 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25965 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25971 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25972 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 25973 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 28356 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
apache 28547 0.0 0.5 224232 6028 ? S Aug04 0:00 /usr/sbin/httpd -k start | |
[root@core-pods-3 ~]# netstat -tlun # 这种看不到守护进程,守护进程没有端口, | |
Active Internet connections (only servers) | |
Proto Recv-Q Send-Q Local Address Foreign Address State | |
tcp 0 0 0.0.0.0:29108 0.0.0.0:* LISTEN | |
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN | |
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN | |
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN | |
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN | |
tcp6 0 0 :::29108 :::* LISTEN | |
tcp6 0 0 ::1:25 :::* LISTEN | |
tcp6 0 0 :::80 :::* LISTEN | |
udp 0 0 0.0.0.0:12345 0.0.0.0:* | |
udp 0 0 0.0.0.0:68 0.0.0.0:* | |
udp 0 0 0.0.0.0:68 0.0.0.0:* | |
udp 0 0 0.0.0.0:44291 0.0.0.0:* | |
udp 0 0 127.0.0.1:323 0.0.0.0:* | |
udp 0 0 0.0.0.0:10000 0.0.0.0:* | |
udp6 0 0 ::1:323 :::* |
# RPM 安装服务和源码包安装服务的区别
它们的主要区别就是安装位置不同
- 源码包安装在指定位置,一般是 /usr/local/,删除直接把目录干掉即可,不会产生任何垃圾文件。
- RPM 包安装在默认的位置中,如配置相关在 /etc, 启动脚本 /etc/rc.d/init.d,RPM 包删除必须加
-e
选项(把所有安装的文件干掉)。
# RPM 包安装服务的管理
# 独立服务的管理
RPM 包安装服务的位置
RPM 安装服务和源码包安装服务的区别就是安装位置的不同。源码包安装在指定位置,一般是 /usr/local/;RPM 包安装在默认位置中,一般如下(注意是通用的,也有特殊):- /etc/init.d:启动脚本位置,或者 /etc/rc.d/init.d 下,两者是软连接关系。
- /etc/sysconfig/:初始化环境配置文件位置
- /etc/:配置文件位置
- /etc/xinetd.conf:xinetd 配置文件
- /etc/xinetd.d/:基于 xinetd 服务的启动脚本
- /var/lib/:服务产生的数据放在这里
- /var/log/:日志
独立服务的启动
- /etc/init.d/ 独立服务名 start|stop|status|restart|
- service 独立服务名 start|stop|status|restart|,service 是 redhat 专门准备的命令,
service --status-all
,查看所有 - systemd 启动:systemctl start|stop|status|restart 独立服务名
独立服务的自启动
- 自启动方法 1:
chkconfig --list
,chkconfig --level httpd on
,centos6 可以用 chkconfig,但是 7 就不行了[root@core-pods-3 ~]# systemctl list-unit-files # centos7 的 systemd
[root@core-pods-3 ~]# systemctl list-dependencies httpd
- 自启动方法 2:修改 /etc/rc.d/rc.local,这个文件在系统启动后,会在在输入用户名密码之前会执行这个文件里命令
[root@core-pods-3 ~]# vi /etc/rc.d/rc.local
- 自启动方法 3:使用 ntsysv 命令管理自启动
- 自启动方法 4:
systemctl enable httpd
,centos7
- 自启动方法 1:
# 基于 xinetd 服务的管理
xinetd,超级守护进程服务,管理各个独立服务,目前基于 xinetd 的服务越来越少了。只有 telnet 服务(不太安全)和 sync 的网络备份服务,telnet 现在远程管理也淘汰了,都在使用 ssh。telnet 默认端口 23,开启后可以使用 netstat -tlun
查看。
# 安装 xinetd 与 telnet
[root@core-pods-3 ~]# yum -y install xinetd | |
[root@core-pods-3 ~]# yum -y install telnet-server | |
[root@core-pods-3 ~]# chkconfig --list # 教程里使用这个命令可以看到 telnet,但是我的看不到 |
# xinetd 服务的启动
命令是 vi /etc/xinetd.d/telnet
(因为我是 centos7,所以没有这个目录,似乎 centos7 的 telnet 不再属于 xinetd 服务了),改过后重启服务 service xinetd restart
。
# xinetd 服务的自启动
两种方式: chkconfig telnet on
或者 使用 ntsysv 图形界面管理(这个是红帽专有)。基于 xinetd 服务的服务启动和自启动区分不那么严格,有串通,就是有时候你改了自启动,会影响启动。
# 源码包安装服务的管理
源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法。eg:
/usr/local/apache2/bin/apachectl start|stop
[root@core-pods-3 httpd-2.4.54]# pwd
/usr/local/httpd/httpd-2.4.54
[root@core-pods-3 httpd-2.4.54]# cat INSTALL | grep apachectl
$ PREFIX/bin/apachectl start
源码包服务的自启动
修改 /etc/rc.d/rc.local,
vi /etc/rc.d/rc.local
,加入/usr/local/apache2/bin/apachectl start
让源码包服务被服务管理命令识别
让源码包的 apache 服务能被 service 命令管理启动,只需要做个软连接即可:
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache
,现在直接执行service apache start
即可。不推荐这样做,主要是为了区分源码包和 RPM 包,容易混淆。如果让源码包的 apache 服务能被 chkconfig 与 ntsysv 命令管理自启动,需要
vi /etc/init.d/apache
,指定 httpd 脚本可以被 chkconfig 命令管理。格式是: chkconfig: 运行级别 启动顺序 关闭顺序 # 如'chkconfig: 25 86 76', 启动顺序 关闭顺序不能和现有的服务启动顺序 关闭顺序相同 description: source package apache # 这里内容随意
查看启动顺序、关闭顺序
[root@core-pods-3 httpd-2.4.54]# ll /etc/rc* # 查看启动顺序、关闭顺序
[root@core-pods-3 httpd-2.4.54]# ll /etc/rc3.d/ # 查看启动顺序、关闭顺序
[root@core-pods-3 httpd-2.4.54]# chkconfig --add apache
[root@core-pods-3 httpd-2.4.54]# chkconfig --list | grep apache
[root@core-pods-3 httpd-2.4.54]# chkconfig apache on
[root@core-pods-3 httpd-2.4.54]# chkconfig --list | grep apache