Ubuntu 16.04,PHP-FPM在使用libsodium-php模块启动时超时

问题(修改:用REPRO步骤!)

重新制作一个新的VPS与Ubuntu 16.04(可能适用于任何Debian发行版,但没有testing),并按照这些指示:

通过实验,我将指令简化为绝对最低限度的重现

apt-get install php7.0 php7.0-dev php-pear apt-get install libsodium-dev pecl install libsodium echo "extension=libsodium.so" >> /etc/php/7.0/fpm/php.ini shutdown -r 0 

当我重新启动服务器( shutdown -r 0 )PHP-FPM死了(通过service php7.0-fpm status确认)

如果我运行service php7.0-fpm start ,它启动毫秒service php7.0-fpm start

我在libsodium-php跟踪器上创build了一个问题,希望有人能find解决方法: https : //github.com/jedisct1/libsodium-php/issues/94

问题

现在我已经缩小了这个问题,我真正想要的是:

  1. 一个方法来弄清楚为什么它是超时(是否有一个好的方法来configuration什么资源被访问或什么是启动时间过程?)

  2. 一种方法来解决它(有没有办法改变引导顺序,以便libsodium引导最后,以防万一它的依赖性问题?)

新的更新

我一直在研究这个,并发现所有的PHP在libsodium库的初始化过程中都会停顿(对sodium_init()的调用)。 这个调用大概需要3-4分钟才能完成,直到这个时间过去了,甚至一个调用php -v失败。

作为解决方法,我已经将以下内容添加到/lib/systemd/system/php7.0-fpm.service

 TimeoutStartSec=600 

这会导致我的Web服务器在重新启动后返回HTTP状态码502几分钟,但最终会再次开始工作(比手动login和修复更好)

我将尝试与libsodium和libsodium-php的开发人员联系,以find更好的解决scheme,但现在我相信我已经解决了这个问题:

解决scheme

  1. 当启动时没有运行某个东西时,开始使用journalctl -u <service>进行调查

  2. 如果超时,请尝试全新安装 – 禁用所有扩展,模块,插件,删除自定义configuration等。如果全新安装正常,请一次启用一项,直到find原因

  3. 如果你绝对需要插件/扩展/无论那你可以通过修改*.service文件并添加TimeoutStartSec=...增加TimeoutStartSec=...

问题在于libsodium PHP扩展。 我已经开始与libsodium的开发人员进行对话,以解决问题。 目前:

解决scheme

  1. 当启动时没有运行某个东西时,开始使用journalctl -u <service>进行调查

  2. 如果超时,请尝试全新安装 – 禁用所有扩展,模块,插件,删除自定义configuration等。如果全新安装正常,请一次启用一项,直到find原因

  3. 如果你绝对需要插件/扩展/无论那你可以通过修改*.service文件并添加TimeoutStartSec=...增加TimeoutStartSec=...