前言
Linux 软件安装方式的不同,也就意味着 安装目录 配置不同,那么就会出现不同的 管理方式,来管理服务的 启动和自启动
学习Linux 服务管理 无非就是 管理各种服务,了解服务关系相关知识,和配置服务的 自动启动等等,对于日常管理服务器人员,还是很有必要了解一下的
首先说RPM包安装 的服务
Linux 中服务分为两种,一种为RPM 包 服务,RPM包安装类型:又分为独立的服务 和基于xinetd 的服务 (比如说通过rpm安装的mysql,和jenkins ,默认都会自己启动,因为rpm安装方式,会将服务,以及相关配置都放在默认的路径下,默认会将服务进行配置并且开机自启动,一种约定俗成的习惯,RPM 安装方式,都会放到这些默认的目录,那么到底有那些默认的目录呢?)
RPM 包安装默认配置
/etc/rc.d/init.d/ 服务启动脚本位置 (独立的服务)
/etc/sysconfig/ 初始化环境配置文件路径
/etc/ 配置文件位置
/var/lib/ 服务产生的数据放在这里
/var/log/ 日志
/etc/xinetd.d/ 服务启动脚本位置 (基于xinetd 的服务)
/etc/xinetd.conf/ xinetd 的服务配置
查看RPM 包安装的服务,可以通过chkconfig --list来查看, 也可以直接查看这个目录/etc/rc.d/init.d 来进行查看RPM包安装的服务,service xxxx start 就是搜索的这个 目录,来进行启动的,service xxxx start 是不能够启动 源码包安装的服务(除非说你将源码包安装的启动脚本也放到这个目录下,或者软连接),只能启动RPM包安装的服务
[root@VM-0-6-centos ~]# 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]'.
jenkins 0:off 1:off 2:off 3:on 4:off 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
rabbitmq-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off
独立服务的启动方式
通过上述目录,既然知道了服务的启动脚本,那么是不是可以通过/etc/rc.d/init.d/ ,绝对路径进行启动服务呢?答案是可以的
经过测试通过路径是可以启动的,service xxxx start就是在这个目录进行搜索xxx名字,只要找到就启动,所以我们也可以直接在目录进行{start|stop|status|try-restart|restart|force-reload|reload|probe}都是可以的
service jenkins start 等同于 /etc/rc.d/init.d/jenkins start
查看所有以rpm包安装的服务的状态
service --status--all
service 命令在不同的linux 系统中会有差异(有的服务器可能不能用,不过我还没遇到不能用的。。。。,如果遇到可以使用绝对路径的方式启动)
[root@VM-0-6-centos init.d]# ./jenkins
Usage: ./jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
[root@VM-0-6-centos init.d]# ./jenkins start
Starting Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins stop
Shutting down Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins start
Starting Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins start
Starting Jenkins [ OK ]
[root@VM-0-6-centos init.d]# service jenkins start
Starting jenkins (via systemctl): [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins status
jenkins (pid 13408) is running...
[root@VM-0-6-centos init.d]# ./jenkins restart
Shutting down Jenkins [ OK ]
Starting Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins stop
Shutting down Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins start
Starting Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins stop
Shutting down Jenkins [ OK ]
[root@VM-0-6-centos init.d]# ./jenkins start
Starting Jenkins [ OK ]
独立的服务。开机自启
修改/etc/rc.d/rc.local 文件,此文件在你服务重启,输入用户密码登路之前,都会执行一次这个文件,(那么只需要将要启动的服务脚本路径写在这里即可)将你要启动的服务 绝对路径放进去即可,待验证。。。。
例如写入jenkins 启动命令 :/etc/rc.d/init.d/jenkins atart
第二种方法(发现我的服务器 自启动 是使用的这种方式)
chkconfig --level 2345 服务名 off 关闭这个服务开机自启
chkconfig --level 2345 服务名 on 开启此服务开机自启
简化写法,默认级别就是2345.可以省略不写
chkconfig 服务名 off 关闭这个服务开机自启
chkconfig 服务名 on 开启此服务开机自启
下图可以看到,服务是自启动的,on
源码包安装的服务管理
一种为源码安装包服务(安装路径自己指定) 这种安装完成就需要每次手工进入对应的目录来启动
那么源码包安装如何配置开机自启动呢?
其中有一种方式和PRM包一样修改 /etc/rc.d/rc.local 这个文件,重启之后,登路之前会执行此文件中的内容,那么也就达到了开机自启(那假如重启之后,没有登路,会怎么样呢?服务还会启动吗???值得思考)
例如 我们把解压安装的nginx配置进去: /usr/local/nginx/sbin/nginx
如何让service xxx start 命令识别 源码包安装的服务启动呢?
使用软连接的方式,将nginx 的执行文件,连接到 /etc/rc.d/init.d/ 下(把源码包启动命令连接到rpm安装启动脚本的目录下),让service 可以找到,就可以启动了
例如: ln -s /usr/local/nginx/sbin/nginx /etc/rc.d/init.d/nginx
//这样就可以使用 service nginx start|stop 启动