ruby,openssl,unicorn,systemd(Gcloud)非常奇怪的行为

gin*_*ime 7 ruby openssl init.d unicorn systemd

我们开始在日志中看到一些奇怪的错误,这些错误通常在使用OpenSSL未正确编译ruby时出现.但它不一致 ......

我们收到的错误如下:

我们设法在使用service unicorn start或启动独角兽时重现它systemctl start unicorn.但只有一些要求......不是全部.一些使用OpenSSL的请求确实有效.其他人没有.

但是,当我们开始独角兽时/etc/init.d/unicorn start,一切都顺利进行.(澄清一下,systemd启动相同的/etc/init.d脚本)

我们尝试调试ENV变量,用户权限,文件/目录所有权,重新编译ruby,从头开始引导新服务器......似乎没有任何帮助.

如果这有帮助:

我们缺少什么?我们可以尝试什么,我们没有想到的?

更新1

  • 输出一些调试命令,例如OpenSSL,ruby等
  • 正在init.d脚本中设置PATH
  • unicorn正在通过su执行到www-data用户
  • 当我们使用这个unicorn.service文件时会发生同样的问题/etc/systemd/system
  • 我们在Gcloud上运行Ubuntu 16.04
  • Ruby 没有安装apt(显式删除,以防平台预先安装)并从头开始编译.我们目前运行2.3.4并尝试2.3.6.手动编译或使用ruby-build编译.不rbenv,也不是RVM.
  • 我们安装libssl-dev via 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之前运行)

更新2

我们正在为VM使用脚本化/可重复的构建过程(使用结构),并且这个问题在我们在GCloud上引导的多个VM上是一致的.然后,我们使用相同的引导脚本在DigitalOcean上尝试了一个VM ,问题似乎没有出现在那里.

在这两种情况下,我们选择了Ubuntu 16.04 64位基本映像,但显然内核版本,基本安装包等存在一些差异......

更新3

问题根本就消失了.请参阅下面的答案.

Mar*_*erg 1

一种选择是这根本不是sysVinitvs的问题systemd,只是您的脚本尚未触发该问题sysVinit

\n\n

当您svsVinit通过命令运行脚本时systemctl,它会通过兼容层,那里可能会出现问题。如果您直接使用服务文件重现问题systemd并共享该文件,您自己和我们的问题都会得到简化。

\n\n

您提到了调试 ENV,但没有具体提到您在 ENV 中检查的内容。systemd这绝对是一个可以发挥作用的地方。如 中所示man systemd.execsystemd将环境中的 $PATH 设置为固定值:

\n\n
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这与直接作为脚本运行时不完全相同sysVinit,则可能是一个问题。

\n\n

我还会检查您系统上的所有 SSL 副本。你有不止一个吗?在哪里?您是否加载了多个模块的副本ruby openssl

\n\n
\xc2\xa0locate -r lib/.*libssl.*so\n
Run Code Online (Sandbox Code Playgroud)\n\n

另请参阅常见问题解答的答案:为什么在 systemd 下事情表现不同?

\n