Выход из сеанса 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
. - Если I SSH как
app
, переключитесьroot
,restart
служба в качествеroot
переключитесь обратноapp
, а затем завершить сеанс, он убивает Apache. - Если я SSH , как
root
,restart
служба, а затем завершить сеанс, Apache прекрасно. - Если I SSH , как
root
,restart
службы, переключитесьapp
переключитесь обратноroot
, а затем завершить сеанс, Apache прекрасно. - Если я SSH , как
root
,restart
сервис, завершить сеанс, SSH сноваapp
, а затем завершить сеанс снова, он убивает Apache. - До этой недели, я был в состоянии последовательно SSH , как
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
доступа к файлам, которые ему необходимо читать / писать.