启动过程不尊重Ubuntu Linux中的文件限制configuration

我在/etc/security/limits.confconfiguration了打开的文件限制

 * 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 .... 

为什么发生这种情况?

回答:尝试“man limits.conf”这是PAM:可插拔authentication模块的一部分

这些限制仅适用于使用PAM构build的程序,通常是进行身份validation(例如:login,su,sudo,ssh,…)。 当你以root身份(通过login,su,sudo,…)login时,你正在进行身份validation,所以你的系统正在使用各种PAM设置,包括limits.conf。

当系统引导时,没有authentication,所以没有读取PAMconfiguration。 你的守护进程将使用默认设置。 如果以后你从根目录启动它(例如在Ubuntu上使用sudo su),那么你当前的shell会得到limits.conf的设置,任何由它运行的shell都会inheritance它们。

可能的解决scheme:由于root可以覆盖限制,所以应该改变守护进程启动脚本中的设置。 例如用ulimit(在“man bash”中search)

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