【发布时间】:2018-08-08 16:55:24
【问题描述】:
我们开始在日志中看到一些奇怪的错误,这些错误通常在 ruby 未使用 OpenSSL 正确编译时出现。但它不一致...
我们收到如下错误:
-
RuntimeError: Unsupported digest algorithm (SHA256).(还有其他摘要,例如sha1)。 example error trace -
Faraday::SSLError (SSL_CTX_new: (null))example error trace
我们在使用service unicorn start 或systemctl start unicorn 启动独角兽时设法重现了它。但只有 一些 请求......不是全部。一些在后台使用 OpenSSL 的请求确实有效。其他人没有。
但是,当我们使用 /etc/init.d/unicorn start 启动 unicorn 时,一切正常。(澄清一下,systemd 启动相同的 /etc/init.d 脚本)
我们尝试调试 ENV 变量、用户权限、文件/目录所有权、重新编译 ruby、从头开始引导新服务器...似乎没有任何帮助。
如果这有帮助:
我们缺少什么?我们可以尝试什么我们没有想到的?
更新 1
- output of some debug commands,例如OpenSSL、ruby 等
- 正在设置路径inside the init.d script
- 独角兽被executed via su into www-data user
- 当我们在
/etc/systemd/system中使用this unicorn.service 文件时也会出现同样的问题 - 我们在 Gcloud 上运行 Ubuntu 16.04
- Ruby 没有通过
apt安装(明确删除,以防平台预先安装)并从头开始编译。我们目前正在运行 2.3.4 并尝试过 2.3.6。手动或使用ruby-build 编译。没有rbenv,也没有RVM。 - 我们通过
apt安装 libssl-dev(我们在构建 ruby 之前运行apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev)
更新 2
我们正在为 VM 使用脚本化/可重复的构建过程(使用结构),这个问题在我们在 GCloud 上引导的多个 VM 上是一致的。然后,我们使用相同的引导脚本在 DigitalOcean 上尝试了一个 VM,但问题似乎没有出现在那里。
在这两种情况下,我们都选择了 Ubuntu 16.04 64 位基础映像,但显然内核版本、基础安装包等存在一些差异......
更新 3
问题就这样消失了。请参阅下面的答案。
【问题讨论】:
-
我意识到这不是 SO 的经典问题,但我们被困住了,真的需要我们能得到的任何帮助。
-
我想说这个问题说得很好,对 SO 来说完全没问题。赞成。
-
你能发布你完整的 systemd 单元文件吗?有时,systemd 会做一些奇怪的事情,比如系统调用过滤、设置 chroot 或资源约束……这可能会以奇怪的方式,有时是不确定的方式影响已启动的进程。
-
我们不使用 systemd .service 文件。我们使用 init.d 文件。我们实际上尝试创建一个 .service 文件,但遇到了同样的问题。
-
在您的 systemd 服务文件中,您应该像在 init.d 文件中一样设置路径以进行奇偶校验:
Environment="PATH=/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin"
标签: ruby openssl unicorn systemd init.d