启动过程不遵守 Ubuntu Linux 中的文件限制配置

启动过程不遵守 Ubuntu Linux 中的文件限制配置

我已经配置了打开文件限制/etc/security/limits.conf

*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000

当我从 shell 启动一个进程时,它运行正常。

但是有一个过程在服务器启动时启动。

# update-rc.d myprocess defaults 99

# cat /proc/1435/limits 
Limit                     Soft Limit           Hard Limit           Units     
....
Max open files            4096                 4096                 files     
....

为什么会发生这种情况?

答案1

答案:尝试“man limits.conf”它是 PAM 的一部分:可插入身份验证模块

这些限制仅适用于使用 PAM 构建的程序,通常进行身份验证(例如:login、su、sudo、ssh、...)。当您以 root 身份登录时(通过 login、su、sudo、...),您正在进行身份验证,因此您的系统正在使用各种 PAM 设置,包括 limits.conf。

系统启动时,没有身份验证,因此永远不会读取任何 PAM 配置。您的守护进程将使用默认设置。如果您稍后从 root 启动它(例如在 Ubuntu 上使用 sudo su -),那么您当前的 shell 将获取 limits.conf 设置,并且它运行的任何程序也将继承这些设置。

可能的解决方案:由于 root 无论如何都可以覆盖限制,因此您应该更改守护进程启动脚本中的设置。例如使用 ulimit(在“man bash”中搜索)

您还可以尝试在启动脚本中使用类似这样的结构:su - -c 'daemon ... =myprocess'。也许这个额外的 su 将使用 PAM 并更改限制。我不知道。告诉我们!

相关内容