重新制作一个新的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
现在我已经缩小了这个问题,我真正想要的是:
一个方法来弄清楚为什么它是超时(是否有一个好的方法来configuration什么资源被访问或什么是启动时间过程?)
一种方法来解决它(有没有办法改变引导顺序,以便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,但现在我相信我已经解决了这个问题:
当启动时没有运行某个东西时,开始使用journalctl -u <service>
进行调查
如果超时,请尝试全新安装 – 禁用所有扩展,模块,插件,删除自定义configuration等。如果全新安装正常,请一次启用一项,直到find原因
如果你绝对需要插件/扩展/无论那你可以通过修改*.service
文件并添加TimeoutStartSec=...
增加TimeoutStartSec=...
问题在于libsodium PHP扩展。 我已经开始与libsodium的开发人员进行对话,以解决问题。 目前:
当启动时没有运行某个东西时,开始使用journalctl -u <service>
进行调查
如果超时,请尝试全新安装 – 禁用所有扩展,模块,插件,删除自定义configuration等。如果全新安装正常,请一次启用一项,直到find原因
如果你绝对需要插件/扩展/无论那你可以通过修改*.service
文件并添加TimeoutStartSec=...
增加TimeoutStartSec=...