摘要
本文介绍了在百度智能云服务器上卸载HAS组件的方案。
前言
之前在给我百度智能云的VPS服务器重新安装HostEye[1]的时候,我一不小心脑袋一昏,往服务器上误装了百度云的HAS组件。这篇文章主要介绍如何从服务器上移除这个HAS组件。
什么是HAS组件
HAS组件,全名Hardware Aware Service,是百度智能云提供给云服务器宿主机(或者类似的裸金属服务器)的全套硬件自动化管理的软件,能够提供智能化的硬件状态管理、事件监控与推送、硬件维修等能力。相关文档链接如下
https://cloud.baidu.com/doc/BCC/s/bmgyqvtdx
https://cloud.baidu.com/doc/BEC/s/imfz6c6ro
https://cloud.baidu.com/doc/BCC/s/Olwg5cnbw
为什么我需要卸载它
就如我刚刚所说,HAS组件是提供给宿主机的用于硬件管理的软件,而我购买的是百度云的VPS[2],这是一个云上的虚拟机,而HAS组件在虚拟机中是完全没有任何实际作用的。
而且HAS组件安装后也是要一直在后台运行的,这个组件占用对于宿主机来说九牛一毛,但是对于低配置的VPS服务器来说还是不容忽视的。如图1所示,这是我截取我服务器各程序硬盘IO占用率的截图,红色方框圈出的是则是has组件占用的硬盘资源详情数据。

当然,这里要声明一点。百度智能云VPS服务器默认镜像是没有HAS组件的,我是一不小心误安装的该组件。如果您是非VPS服务器用户,不推荐卸载HAS组件。
检查我的服务器是否安装了HAS组件
我们可以通过检查/home/opt 这个目录下面,看下是否有has、has-agent这两个文件夹,如果有,代表您服务器上安装了has组件,如图2所示。

当然我们也可以通过查看进程,来判断系统中是否存在HAS组件,查找命令如下。
ps aux |grep has
如果有下列的进程运行的话,说明您系统上存在HAS组件,命令运行截图如图3所示。
root 3935 0.0 0.0 6304 328 ? Ss Feb27 0:00 /opt/avalokita/bin/avalokita --update-url=http://has-master-a.sdns.baidu.com/download/qa_packages/bbc//has-agent-installer.sh --signature-url=http://has-master-a.sdns.baidu.com/download/qa_packages/bbc//has-agent-installer.sh.sig --certificate=/home/opt/has-agent/cert.pem --update-interval=3600 --max-executable-size=1000000000 /home/opt/has-agent/has-agent-installer.sh
root 68133 0.0 0.1 10540 2996 ? S Feb27 0:00 bash /home/opt/has-agent/test.sh
root 71543 0.1 0.4 393256 8176 ? Ssl Feb27 4:00 /home/opt/has/has_client/has_agent
root 71888 0.0 0.1 1608004 2248 ? Sl Feb27 0:02 /home/opt/has/hdoctor/check/logcheck --gpu=20
root 71964 0.0 0.0 1444 64 ? Ss Feb27 0:00 /home/opt/has/hdoctor/monitor/plugins/mcelog/checkmce --config-file /home/opt/has/hdoctor/monitor/plugins/mcelog/conf/mcelog.conf --daemon

ps aux |grep has命令在存在HAS的时候的运行结果截图如何卸载
备注:截止到本文写完(2026年3月3日),最新的HAS版本为1.1.3.144,本文示范的版本也是1.1.3.144。
操作需要重启,且有可能造成服务中断,请务必在修改前对服务器进行备份(比如使用快照功能)。
本文中的操作系统是Ubuntu 24.04。
我自己找到的卸载方案
我自己经过多次实验,总结了下述的卸载方案。首先,前往/home/opt/has-agent/output这个文件夹,在这个文件夹中,有文件叫做standalone.sh。我们在这个文件夹路径下执行下述命令(注意,后续操作都需要root权限)
sh standalone.sh stop
这个命令用于停止HAS服务,执行成功会在终端输出success(我运行的时候,会输出两个success),如图4所示。

sh standalone.sh stop执行后的终端输出截图执行完成后,再执行下列命令。
sh standalone.sh delservice
此命令用于删除HAS的服务,此命令执行后没有任何输出。执行完后接下来继续执行下面的命令
sh standalone.sh uninstall
这个命令就是用于卸载HAS组件包,此过程可能需要一些时间才能完成,如果运行正常,终端应该输出如图5中所示,有很多个success。

sh standalone.sh uninstall执行成功后的终端输出结果当然,如果终端输出failed,如图6所示,代表卸载失败了。您可以尝试重试(经过我多次测试,第一次失败,再执行一次基本上都能成功,我猜测可能是临时有进程占用了文件)。

sh standalone.sh uninstall执行失败后的终端输出结果执行完上述命令后,系统中还是有一些残留的东西,crontab中的HAS组件用于保活的计划任务并没有在上述流程中被删除掉。我们输入下述命令
crontab -l | grep has_control
会输出下面的内容(输出截图如图7),这个条目就是HAS残留的计划任务
*/10 * * * * /home/opt/has/has_control keepalive > /dev/null 2>&1、

crontab -l | grep has_control的输出结果我们执行下述命令移除这个计划任务
sudo crontab -l | grep -vF '/home/opt/has/has_control keepalive' | sudo crontab -
执行完成后重启服务器。重启后重新前往/home/opt这个目录,可以看到这个目录下只有has-agent这个文件夹了,如图8所示。我们直接删除掉这个文件夹就可以了。

然后我们再次执行ps aux |grep has,可以看到结果如图9所示,没有HAS相关的进程了。(备注:程序会输出一个进程,但这个进程是当前的查找程序的进程,并不是残留的HAS进程)

ps aux |grep has的输出结果咨询百度智能云,他们提供的卸载方案
我也问了百度智能云,咨询了是否有相关的删除方案,他们也提供了一种方案。(我感觉这种方案比较暴力,也能卸载掉HAS,但是会有一些残留),下面是他们提供的方案(反馈截图如图10所示)。
先对机器做个镜像备份,然后执行 rm -rf /home/opt/has-agent/ /home/opt/has 删除整个目录,然后ps aux |grep has ,使用kill -9 把这些进程(进程号在图10中有所展示)一个一个删除掉。
