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

use*_*114 21 debian ulimit

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

问题是,该应用程序需要特殊的限制设置(即ulimit -n 64000),我在limits.conf. 当我直接从 shell 运行它时,这非常有效:su - SOME_SYSTEM_USER+ start app from shell。

但是当运行start-stop-daemon --chuidfrom 时/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

小智 24

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

Debian 错误#302079包含一个允许从 设置限制的补丁start-stop-daemon(8),但该错误自 2005 年以来一直存在并且该补丁尚未合并。

虽然不理想,AFAIK 现在推荐的方法是ulimit在你的 init.d 脚本中添加一个调用。


小智 7

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

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

limit nofile 64000 64000
Run Code Online (Sandbox Code Playgroud)

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

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