使用Puppet配置ulimit

5

我想知道如何使用Puppets exec类型运行ulimit命令。 ulimit命令的问题似乎是它不是二进制文件,因此必须在其前面使用/bin/bash进行调用。 我正在尝试将核心文件大小更改为无限制。 我有这个命令但它无法识别ulimit。

exec {"ulimit":
        command => "/bin/bash ulimit -c unlimited",
}

我可以在命令行中执行 'ulimit -c unlimited' 并且可以轻松更改值。问题是如何通过Puppet实现这一点。希望能够得到帮助。


有谁熟悉 Puppet 使用的 shell? - Axel Advento
这不是使用Puppet的正确方式。像这样使用代码,每次Puppet运行时(在修复命令后)都会更改限制。首选的方法是使用某个模块,只有在值与所需值不同时才执行操作。 - Tombart
5个回答

3
我建议尝试使用/etc/security/limits.conf进行此更改,例如:
<user>   soft   core   unlimited
<user>   hard   core   unlimited

您可以使用Augeas来完成此操作,类似于此处的说明。虽然不确定您的确切需求/用例,但至少请考虑这种方法!

我已经使用Puppet将这些行添加到limits.conf文件中,这很酷,但是我无法使限制生效。我尝试了所有方法(重新启动,登录,编辑pam和ssh文件),并且自从我发布这篇文章以来一直在谷歌上搜索。有什么想法吗? - Alan Smith
只有在重新启动应用程序、运行新进程、用户登录等情况下,您尝试修复的外壳才能生效。老实说,我不完全清楚出了什么问题。您能展示一下如何确认这些设置没有生效或者您已经进行了哪些其他故障排除以找到答案吗? - Mark Stanislav
1
它们没有生效,因为当我重新登录或重启时,ulimit不会更新,即使limits.conf文件是正确的。我还在/etc/pam.d/目录下的su、sudo、ssh和login中添加了“session required pam_limits.so”行。我还将sshd_config设置为使用pam,输入usePam yes。 - Alan Smith
sysctl -p 对你有效吗?在执行上述命令后,您可能需要使用 requirenotify 等方式来应用更改。 - Axel Advento

1
另一种方法是安装erwbgy puppet模块并简单地定义如下内容:
include limits
limits::entry { 'my-limits':
    domain => $user,
    type   => 'soft',
    item   => 'core',
    value  => 'unlimited',
}

在你的Puppet脚本中。

0

如果您使用/etc/security/limits.conf更改限制,则必须重新启动进程以使它们使用新的限制。

例如,如果您的Puppet代理需要重新启动服务("service myservice restart"),则该服务将从运行具有root用户和旧限制的Puppet进程启动。

因此,您的服务在/etc/init.d中的服务初始化脚本必须强制登录,例如使用“su”或“sudo”更改用户,以强制服务使用新的限制。

请参阅http://linux.die.net/man/5/limits.conf

"另外,请注意,所有限制设置都是针对每个登录设置的。它们不是全局的,也不是永久的;只持续会话期间。"


0
将系统范围内的 ulimit(root)增加到您喜欢的最高值。
* soft nofile 1000000
* hard nofile 250000

然后添加用户特定的限制,例如对于httpd用户

httpd hard nofile 100000
httpd soft nofile 25000

注意:在此情况下,httpd 不能超过系统上限(*),即使您已经为 httpd 用户分配了更高的值,系统也不会允许它。
进程可能需要重新启动(无需重新启动系统),以便它们获取新值,但是您可以通过查看 $cat /proc//limits 来确认它们是否已经获取了这些新值。
如果没有,请重新启动该进程。

0

命令错误,应该是:

command => "/bin/bash -c 'ulimit -c unlimited'"

它没有起作用。命令成功执行,但重新登录后ulimit没有更新。 - Alan Smith
你是否使用与Puppet执行命令时不同的用户登录?在exec中添加user => 'name',其中name是您用于登录的用户名。 - Gergo Erdosi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接