为什么Systemd删除了我的SHM文件而不是Postgresql的文件?



我正在 Ubuntu 服务器上开发一个由 Systemd 管理的守护进程应用程序。

我使用shm_open在/dev/shm/中创建一个 SHM 文件,并在调用mmapclose文件描述符。一开始它存在,但一段时间后它消失了,也许是当我从服务器注销时。

也许这是由/etc/systemd/logind.conf 中RemoveIPC=yes的选项控制的。

我的问题是

  1. 为什么systemd不清理Postgresql创建的shm文件,而是清理我的?
  2. 如何修改我的应用程序使其像Postgresql,以便我们可以减少生产时的管理/维护工作。
  3. 我发现 shm 内存在被 systemd 清理后仍然可用。这是否意味着我可以忽略它,并继续使用它而不重新创建?

我认为你的怀疑是对的;有关详细信息,请参阅文档:

如果正在使用 systemd,则必须注意不要过早地删除 IPC 资源(包括共享内存)。从源代码安装 PostgreSQL 时,这一点尤其值得关注。PostgreSQL分发包的用户不太可能受到影响,因为postgres用户通常被创建为系统用户。

logind.conf中的设置RemoveIPC控制在用户完全注销时是否删除 IPC 对象。系统用户除外。此设置在库存 systemd 中默认为 on,但某些操作系统发行版默认为 off。 [...]

"用户注销"可能是维护作业的一部分,也可能在管理员以postgres用户身份登录时手动发生,因此通常很难防止。

什么是"系统用户"是在 systemd 编译时根据/etc/login.defs中的SYS_UID_MAX设置确定的。

打包和部署脚本应小心地使用useradd -radduser --system或等效项将postgres用户创建为系统用户。

或者,如果用户帐户创建不正确或无法更改,建议设置

RemoveIPC=no

/etc/systemd/logind.conf或其他适当的配置文件中。

虽然这是在谈论PostgreSQL,但这同样适用于你的软件。因此,请采取推荐的措施之一。

相关内容

  • 没有找到相关文章

最新更新