Назад | Перейти на главную страницу

Выход из сеанса SSH внезапно убивает Apache

Ладно, это круто. Я запускаю Apache 2.4 на экземплярах сервера Ubuntu 16.04. Я использую почти идентичные среды как для производственных, так и для тестовых экземпляров, а также почти идентичный экземпляр VirtualBox, которым я управляю с помощью Vagrant для разработки. В течение долгого времени я мог подключиться к любому из этих экземпляров сервера по SSH от имени того же пользователя, под которым работает Apache, развернуть некоторые изменения кода приложения и затем запустить exit чтобы завершить сеанс SSH, и после этого Apache будет работать нормально. Однако сейчас я не могу exit если служба Apache не обнаружит фатальную ошибку:

[mpm_prefork:emerg] [pid 23466] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[core:alert] [pid 17750] AH00050: Child 23466 returned a Fatal error... Apache is exiting!

Ноты:

Есть ли какое-нибудь объяснение внезапной смене поведения? Есть ли разумное решение для восстановления прежнего поведения? Если нет, то что было бы лучше всего для развертывания изменений в коде приложения и предоставления разрешений для Apache ( app пользователь), чтобы прочитать его, не входя в сеанс SSH как root? Вся причина входа в систему как app было ограничить необходимость входа в систему как root в первую очередь.

Я здесь в полной растерянности и не понимаю, как все могло вдруг сломаться.

Основная причина этого - изменение в том, как systemd (с 219) обрабатывает объекты IPC, созданные зарегистрированными пользователями. По умолчанию он удаляет все объекты IPC, оставшиеся после выхода пользователя из системы. Это относится ко всем несистемным пользователям (uid> = 1000). Системные пользователи (uid <1000) не затронуты.

Поскольку вы изменили Apache для работы под несистемным пользователем, всякий раз, когда вы выходите из этой учетной записи, systemd уничтожает все объекты IPC Apache, а затем Apache жалуется на потерю своего мьютекса и умирает.

Вы можете изменить это поведение, установив RemoveIPC=no в /etc/systemd/logind.conf (по умолчанию в Ubuntu это yes) и перезапуск systemd-logind.service.

Лучше оставить Apache запущенным как системный пользователь (например, www-data в Ubuntu) и используйте разрешения и ACL, чтобы www-data доступ к файлам, которые необходимо читать / писать.