Почему после обновления версии curl требовался перезапуск apache?

У меня есть сервер, на котором работает PHP, использующий mod_php в Apache. Apache использует Prefork MPM. У меня были ошибки SSL из-за использования старой версии CURL.

Я выполнил команду «sudo yum update curl».

Она успешно обновила curl, но я заметил, что все еще периодически получаю ошибки SSL. Это было исправлено простым перезапуском Apache.

Итак, мои 2 вопроса:

  1. Почему потребовался перезапуск Apache? т.е. php.ini не был изменен (если yum не сделал этого за кулисами)?

  2. Почему ошибки SSL возникали только периодически? то есть почему он просто не работал, пока не был перезапущен apache?

-2
задан 23 December 2016 в 23:15
1 ответ

Во-первых, этот вопрос сильно связан с разделяемыми библиотеками в Linux (и не только), и вы не знаете, как это работает. Это важные знания, если вы хотите работать в бизнес-среде, как предполагает этот сайт, поэтому я настоятельно рекомендую вам продолжить знакомство с вашей работой.

  1. Поскольку вы используете mod_php, это означает, что PHP-код интерпретируется внутри процессов Apache. Общие библиотеки обычно загружаются при запуске процесса, так что если вы не перезапустите его, он, конечно же, продолжит использовать старые библиотеки (представьте, какой беспорядок будет, если нет, относительно всех тех указателей на функции, которые он знает из предыдущей библиотеки!)

  2. Исходя из предоставленной вами информации, я предполагаю, что вы используете Apache с предустановленным МП-модулем. Это значит, что Apache порождает процессы "время от времени", согласно алгоритму, который у него есть, и некоторым параметрам, которые вы даёте ему в конфигурационном файле. Теперь вилочные процессы наследуют память процессов, которые их порождают (на самом деле они копируются с помощью CoW). Сюда входят все общие библиотеки, которые были загружены. Я думаю, что PHP инициализируется лениво, когда каждый вилочный процесс нуждается в этом в первый раз, или что-то в этом роде. Когда ваш запрос заканчивался на процессе, который был порожден до обновления CURL, вы получали ошибку. Когда ваш запрос оказался на процессе, который был порожден после обновления CURL, вы не получали ошибку, так как PHP-движок в этом процессе загрузил новую библиотеку CURL.

Хорошая практика, при обновлении библиотек, заключается в том, чтобы убедиться, что вы перезапустите все службы, которые его используют, чтобы избежать именно таких проблем, а не только.

.
3
ответ дан 5 December 2019 в 21:10

Теги

Похожие вопросы