使 ulimits 与 start-stop-daemon 一起工作

使 ulimits 与 start-stop-daemon 一起工作

我有一个init.d使用 启动应用程序的脚本start-stop-daemon --chuid SOME_SYSTEM_USER。也就是说,该应用程序在不同的用户(而不是 root)下运行。

问题是,应用程序需要特殊的限制设置(即ulimit -n 64000),我在中设置了limits.conf。当我直接从 shell 运行它时,它运行得很好:su - SOME_SYSTEM_USER+ 从 shell 启动应用程序。

但在通过 运行时start-stop-daemon --chuid/etc/init.d这些限制会被忽略。那么应用程序显然无法运行。

我如何强制start-stop-daemon遵守ulimit设置?


Debian Squeeze,2.6.32-5-686 #1 SMP 星期六 5 月 5 日 01:33:08 UTC 2012 i686 GNU/Linux

答案1

目前,您不能。limits.conf(5)是的配置pam_limits(8),它由 PAM 堆栈根据中的配置激活/etc/pam.d。但是,start-stop-daemon(8)由于从 init.d 脚本启动不会通过 PAM 堆栈,因此永远不会应用这些类型的设置。

Debian 错误#302079包含一个补丁,可以设置限制start-stop-daemon(8),但这个错误自 2005 年起就一直存在,而且补丁还没有合并。

虽然不是最理想的,但据我所知,目前实现此目的的推荐方法是ulimit在 init.d 脚本中添加一个调用。

答案2

您还可以在 upstart 脚本中使用“limit”命令。

在文件 /etc/init/foo.conf 中,添加以下行:

limit nofile 64000 64000

第一个64000是软限制,第二个是硬限制。

您可以在这里找到更多信息: http://upstart.ubuntu.com/cookbook/

相关内容