执行apache.modules后salt-minion进入reloading状态如何修复
问题触发原因
- Salt 3003.1版本的
apache.modules执行逻辑存在已知缺陷:该函数会先尝试重载Apache服务以获取最新的模块列表,且默认读取的Apache服务名为httpd。而IUS源提供的Apache 2.4.48的系统服务名通常为httpd24u/httpd24,与默认值不匹配,导致模块的服务操作逻辑出现变量逃逸问题,错误向salt-minion自身进程发送了SIGHUP重载信号。 - 你的Salt Minion配置中存在未正确闭合的配置项、或者需要交互的配置加载逻辑(比如配置中引用了需要高权限读取的加密文件、未正常配置的外部资源),导致Minion收到SIGHUP信号后重载配置时卡住,一直停留在Reading configuration的reloading状态,且因为加载流程卡住,没有输出日志到minion日志文件。
排查步骤
- 确认当前系统内Apache的服务名:执行
systemctl list-units | grep httpd,查看实际运行的Apache服务名是否为默认的httpd,如果输出为httpd24u.service或其他非默认名称,即可确认服务名不匹配的问题。 - 在Minion端手动模拟Salt模块的执行逻辑:运行
salt-call apache.modules -l debug,观察debug日志中是否有调用服务重载的步骤、以及调用的服务名参数是否与实际Apache服务名一致。 - 检查Salt Minion配置文件
/etc/salt/minion及/etc/salt/minion.d/下的所有配置项,排查是否有语法错误、是否有引用外部动态资源(如vault密钥、远程配置源、需root权限才能读取的文件)的配置,这些都会导致重载配置时卡住。 - 查看系统syslog日志
/var/log/messages,检查在执行apache.modules命令的时间点,是否有salt-minion收到SIGHUP信号的相关记录。
修复方案
- 修正Salt Apache模块的服务名配置:在Minion端的
/etc/salt/minion.d/下新增配置文件apache.conf,添加以下内容指定正确的Apache服务名:
注意将值替换为你实际查询到的Apache服务名,配置完成后先手动重启salt-minion服务生效。apache.service_name: httpd24u - 修复Salt Minion配置的卡住问题:清理minion配置中无效的配置项,移除或修正需要加载外部资源的配置,确保单独执行
systemctl reload salt-minion时可以正常完成重载,不会卡住。 - 版本升级方案:可以将Salt版本升级到3004及以上版本,该版本已经修复了apache模块错误发送SIGHUP信号的已知缺陷。
- 临时规避方案:如果暂时不想调整配置,可以在执行apache相关命令时额外指定服务名参数:
salt 'target' apache.modules service_name=httpd24u,避免模块调用错误。
内容的提问来源于stack exchange,提问作者Sonal
相关产品推荐
相关产品推荐

