gin*_*ime 7 ruby openssl init.d unicorn systemd
我们开始在日志中看到一些奇怪的错误,这些错误通常在使用OpenSSL未正确编译ruby时出现.但它不一致 ......
我们收到的错误如下:
RuntimeError: Unsupported digest algorithm (SHA256).(还有其他摘要,如sha1).示例错误跟踪Faraday::SSLError (SSL_CTX_new: (null)) 示例错误跟踪我们设法在使用service unicorn start或启动独角兽时重现它systemctl start unicorn.但只有一些要求......不是全部.一些使用OpenSSL的请求确实有效.其他人没有.
但是,当我们开始独角兽时/etc/init.d/unicorn start,一切都顺利进行.(澄清一下,systemd启动相同的/etc/init.d脚本)
我们尝试调试ENV变量,用户权限,文件/目录所有权,重新编译ruby,从头开始引导新服务器......似乎没有任何帮助.
如果这有帮助:
我们缺少什么?我们可以尝试什么,我们没有想到的?
/etc/systemd/systemapt(显式删除,以防平台预先安装)并从头开始编译.我们目前运行2.3.4并尝试2.3.6.手动编译或使用ruby-build编译.不rbenv,也不是RVM.apt(我们apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev在构建ruby之前运行)我们正在为VM使用脚本化/可重复的构建过程(使用结构),并且这个问题在我们在GCloud上引导的多个VM上是一致的.然后,我们使用相同的引导脚本在DigitalOcean上尝试了一个VM ,问题似乎没有出现在那里.
在这两种情况下,我们选择了Ubuntu 16.04 64位基本映像,但显然内核版本,基本安装包等存在一些差异......
问题根本就消失了.请参阅下面的答案.
一种选择是这根本不是sysVinitvs的问题systemd,只是您的脚本尚未触发该问题sysVinit。
当您svsVinit通过命令运行脚本时systemctl,它会通过兼容层,那里可能会出现问题。如果您直接使用服务文件重现问题systemd并共享该文件,您自己和我们的问题都会得到简化。
您提到了调试 ENV,但没有具体提到您在 ENV 中检查的内容。systemd这绝对是一个可以发挥作用的地方。如 中所示man systemd.exec,systemd将环境中的 $PATH 设置为固定值:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nRun Code Online (Sandbox Code Playgroud)\n\n如果这与直接作为脚本运行时不完全相同sysVinit,则可能是一个问题。
我还会检查您系统上的所有 SSL 副本。你有不止一个吗?在哪里?您是否加载了多个模块的副本ruby openssl?
\xc2\xa0locate -r lib/.*libssl.*so\nRun Code Online (Sandbox Code Playgroud)\n\n另请参阅常见问题解答的答案:为什么在 systemd 下事情表现不同?
\n