我有一个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/