Ладно, это круто. Я запускаю 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!
Ноты:
app
.app
, переключиться на root
, restart
услуга как root
, переключитесь обратно на app
, затем завершите сеанс, он убьет Apache.root
, restart
сервис, затем завершите сеанс, Apache в порядке.root
, restart
сервис, переключитесь на app
, переключитесь обратно на root
, затем завершите сеанс, Apache в порядке.root
, restart
сервис, завершите сеанс, снова SSH как app
, затем снова завершите сеанс, он убьет Apache.app
, переключиться на root
, restart
услуга как root
, и завершите сеанс, не убивая Apache./lib/systemd/system/apache2.service.d/apache2-systemd.conf
и меняя строку RemainAfterExit=no
к RemainAfterExit=yes
, выполнила systemctl daemon-reload
, и наконец service apache2 restart
без эффекта.Есть ли какое-нибудь объяснение внезапной смене поведения? Есть ли разумное решение для восстановления прежнего поведения? Если нет, то что было бы лучше всего для развертывания изменений в коде приложения и предоставления разрешений для 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
доступ к файлам, которые необходимо читать / писать.