作者:李继武
1.文档编写目的
在前面的文章《0520-如何使用非root用户启动CM的Server和Agent服务》中,Fayson介绍过在CDH5中,无论是Cloudera Manager Server还是Agent服务都无法配置为其他用户来启停,只能通过root用户来管理。这里假设我们有root用户或者有sudo(ALL)权限的普通用户,但我们依旧不想通过系统自带的system或者systemctl来操作这2个服务,而是直接操作CM Server和Agent的脚本文件。本篇文章Fayson主要说明CDH5和CDH6版本中cloudera-scm-server和cloudera-scm-agent服务停止脚本的变化。
- 测试环境
1.CDH6.1.0
2.CDH5.15.0
2.CDH5中CM和Agent服务停止脚本实现
在CDH5中这两个服务的启停方式是在/etc/init.d目录下提供两个shell脚本cloudera-scm-agent和cloudera-scm-server,脚本中停止服务的方式是调用了local_killproc函数
local_killproc函数中最终调用的是/etc/init.d/functions脚本中的killproc函数
cloudera-scm-server和cloudera-scm-agent服务的最终停止脚本是通过服务的pid文件找到服务的找到服务的进程ID使用kill命令杀掉进程从而实现停止服务。
3.CDH6中CM和Agent服务停止脚本实现
在C6中启停cloudera-scm-agent和cloudera-scm-server服务的方式与C5有一定的区别,可以说C5下两个服务的启停方式使用的是RedHat6下通过将shell脚本注册为OS的Service,通过Service命令stop服务,终止是通过kill的方式杀掉集成而停止服务。
而在C6下完全抛弃了Redhat6中通过Service的方式管理服务,而是使用systemctl的方式管理服务。通过Systemctl的方式管理服务,最终服务的启停会在/usr/lib/system/system目录下创建cloudera-scm-server和cloudera-scm-agent服务启停,该文件只是配置文件,不属于shell脚本
在定义的两个配置文件中可以看到ExecStart参数指定了服务的启动脚本,systemd只支持预定义的Action,如:ExecStart, ExecStartPre, ExecStartPost, ExecStop, and ExecReload,在两个服务的定义脚本中并未指定ExecStop执行脚本(推测systemctl stop操作是调用RedHat7默认的操作),因此cloudera-scm-agent和cloudera-scm-server两个服务并未提供stop的脚本。
4.总结
1.在CDH5中,cloudera-scm-agent和cloudera-scm-server两个服务并未提供单独停止服务的脚本,但启动脚本中有相应的停止函数,是直接调用的kill进程的函数。
2.在CDH6中,cloudera-scm-agent和cloudera-scm-server两个服务也未单独提供停止服务的脚本,启动脚本中也没有停止函数。
3.在CDH6中,cloudera-scm-agent和cloudera-scm-server两个服务如果需要停止建议使用systemctl stop执行进行操作,依靠RedHat默认的机制实现服务的停止动作。
4.对于CDH6,如果需要手动操作脚本停止服务,也可以参照CDH5版本的停止方式,通过kill的方式将进程停止。
本篇文章有个疑问,在RedHat7系统下,ExecStop参数未配置停止服务的脚本时,默认是通过什么方式停止服务的?是否和RedHat6一样也是通过kill进程的方式暴力停止?