使ulimits与start-stop-daemon一起使用


20

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

问题是,该应用需要特殊的限制设置(即ulimit -n 64000),我在中进行了设置limits.conf。当我直接从shell运行它时,这很好用:su - SOME_SYSTEM_USER+从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

Answers:


23

目前,您不能。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脚本中添加调用。


只需ulimitstart-stop-daemon命令前添加设置即可。(例如ulimit -n 64000)……对于像我这样的无知者。
瑞安·舒马赫

如果与OP不同,如果您不知道哪个守护程序崩溃,那么在Debian Wheezy重新启动守护程序之后,我得到了很好的结果:echo“ ulimit -c unlimited” | sudo tee /lib/lsb/init-functions.d/core-limit
Martin Dorey

一些更有价值的背景信息可以在这里找到:serverfault.com/a/642082/22394
sehe

7

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

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

limit nofile 64000 64000

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.