在Redhat 6和7上使用rpm postinstall scriptlet时,我遇到了一个非常奇怪的问题。
scriptlet需要对localhost url执行curl get请求。完整的请求是:
curl -sk https://127.0.0.1:8091/upgrade
如果我手动运行postinstall,它可以正常工作,但是作为部分或rpm,它会失败。在strace的帮助下,我发现失败是由于curl使用异步连接和轮询。轮询在运行rpm时返回POLLHUP。
这有一个更奇怪的转折。如果我在卷曲之前放一个睡眠1,那它就可以了!
毋庸置疑,我对这个“解决方案”不满意。向脚本添加睡眠通常是您无法理解问题的明确信号。
那里有谁最不知道这里发生了什么?当脚本由rpm运行时,它有什么不同?在卷曲之前睡觉怎么会有任何不同?非常感谢任何想法!