B. *_*ing 10 linux ssh apache-2.4
好吧,这是一个愚蠢的。我在 Ubuntu 16.04 服务器实例上运行 Apache 2.4。我将几乎相同的环境用于生产和测试实例,以及我使用 Vagrant 管理的几乎相同的 VirtualBox 实例进行开发。长期以来,我一直能够以运行 Apache 的同一用户身份通过 SSH 连接到这些服务器实例中的任何一个,部署一些应用程序代码更改,然后运行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!
Run Code Online (Sandbox Code Playgroud)
笔记:
app.app,切换到root,restart服务 as 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,执行 a systemctl daemon-reload,最后 aservice apache2 restart没有效果。对行为的突然变化有什么解释吗?是否有合理的修复方法可以恢复以前的行为?如果不是,那么部署对应用程序代码的更改并授予 Apache(app用户)读取它的权限而无需以 SSH 会话身份登录的最佳实践是root什么?登录 as 的全部原因app是限制登录的需要root。
我在这里完全不知所措,不明白一切怎么会突然被打破。
Mic*_*ton 25
其根本原因是 systemd(从 219 开始)处理登录用户创建的 IPC 对象的方式发生了变化。默认情况下,它将删除用户注销后留下的所有 IPC 对象。这适用于所有非系统用户(uid >= 1000)。系统用户 (uid < 1000) 不受影响。
由于您已将 Apache 更改为在非系统用户下运行,因此每当您注销该用户帐户时,systemd 都会破坏 Apache 的所有 IPC 对象,然后 Apache 会抱怨丢失其互斥锁并死亡。
您可以通过设置改变这种行为RemoveIPC=no在/etc/systemd/logind.conf(在Ubuntu默认的是yes),并重新启动systemd-logind.service。
最好让 Apache 以系统用户身份运行(例如www-data在 Ubuntu 上),并使用权限和 ACL 来www-data访问它需要读/写的文件。
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |