我需要在启动时为所有服务设置 ulimit 值。我在 /etc/sysconfig/limits.conf 中设置了值,但这些值在启动时不适用,并且默认为 1024。
我已经在 limits.conf 中设置了值,还检查了 /etc/pam.d/* 是否包含“required pam_limits.so”条目,甚至 /etc/security/limits.d/90-nproc.conf 没有默认条目。
现在我找到了另一种在启动时包含该值的方法,我遇到了 /etc/sysconfig/init 文件。当我在此文件中设置该值时,所有服务在启动时都会获得预期值。
现在,我不确定这会对服务器产生什么影响,以及应该忽略此 /etc/sysconfig/init 文件中的哪些配置。此外,除了此文件或上述方法之外,还有其他替代方案吗?
答案1
ulimits 不是特定于服务或系统范围的,而是特定于单个帐户的。软限制/etc/security/limits.conf
应该是启动服务时默认显示的内容;这似乎不会发生在您的案例中,因此我将开始查看运行相关服务的用户的点文件或相关服务的实际 init 脚本。我感觉您的 ulimit 是在这两个地方之一设置的,因此会覆盖这些/etc/security/limits.conf
值。
答案2
我使用你说的方法来设置ulimit
Apacheumask
用户创建的文件。也就是说,我编辑/etc/init.d/httpd
并在那里包含了umask
和ulimit -s
配置,这解决了我的问题,所以我想这是一个很好的解决方案。除了预期的影响之外,它没有任何影响。
答案3
该文件/etc/security/limits.conf
由 PAM 使用,但用户登录时会使用 PAM。但是,启动服务时不会经过 PAM,因此这无济于事limits.conf
。服务由 init 系统启动,其设置取决于所使用的系统。如果您使用的是 upstart,则可以在/etc/sysconfig/init
系统范围或/etc/sysconfig/<servicename>
每个服务中进行设置。在 systemd 世界中,可以通过 usint 在服务文件中设置 ulimits Limit<type>=
,我不确定如何在系统范围内进行设置。使用 OpenRC,您可以rc_ulimit=
在 中为每个服务或系统范围进行设置/etc/rc.conf
。