SystemdDoctor
мешает работе php-fpm выкладка

php-fpm отдаёт старый код после выкладки

PHP кеширует скомпилированный код, и по умолчанию проверяет изменения файлов не на каждом запросе. После выкладки новая версия может не примениться, пока кеш не сброшен или не истечёт срок проверки.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Проверка изменений файлов отключена

    На боевых серверах проверку часто отключают ради скорости. Тогда кеш живёт до перезагрузки службы.

  2. Срок проверки изменений велик

    При заданном интервале проверки файл перечитывается не сразу. Разница между выкладкой и применением достигает минут.

  3. Выкладка меняет файлы на месте

    Замена файлов по одному приводит к смеси версий: часть уже новая, часть ещё в кеше. Это опаснее задержки.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Действующие настройки кеша скомпилированного кода.

php -i | grep -E "^opcache"

Перезагрузка обработчика сбрасывает кеш.

sudo systemctl reload php8.3-fpm && echo сброшено

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Проверка изменений файлов отключена
Почему происходит
На боевых серверах проверку часто отключают ради скорости. Тогда кеш живёт до перезагрузки службы.
Как проверить
Посмотрите настройки кеша.
php -i 2>/dev/null | grep -E "opcache.validate_timestamps|opcache.revalidate_freq|opcache.enable"
Как исправить
Добавьте в выкладку перезагрузку обработчика: systemctl reload php8.3-fpm сбрасывает кеш без разрыва запросов.
2. Срок проверки изменений велик
Почему происходит
При заданном интервале проверки файл перечитывается не сразу. Разница между выкладкой и применением достигает минут.
Как проверить
Посмотрите значение интервала.
php -i 2>/dev/null | grep opcache.revalidate_freq
Как исправить
Либо сократите интервал, либо явно перезагружайте обработчик при выкладке. Второе предсказуемее.
3. Выкладка меняет файлы на месте
Почему происходит
Замена файлов по одному приводит к смеси версий: часть уже новая, часть ещё в кеше. Это опаснее задержки.
Как проверить
Посмотрите, как устроена выкладка.
ls -l /var/www/ | head
Как исправить
Выкладывайте новую версию в отдельный каталог и переключайте ссылку: тогда переход мгновенный, а кеш сбрасывается перезагрузкой обработчика.

Пример вывода

Файлы обновлены, сайт отдаёт прежнюю версию. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ php -i | grep validate_timestamps
opcache.validate_timestamps => Off => Off

$ ls -l --time-style=full-iso /var/www/app/index.php
-rw-r--r-- 1 www-data www-data 4210 2026-09-15 16:40:02 /var/www/app/index.php
# при этом сайт отдаёт код от 15:10

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация PHP: настройка OPcache документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено выкладкой при отключённой проверке изменений: помогает только перезагрузка обработчика.
    собственная проверка, systemd 255
    сверено 15 сентября 2026