当我运行cron时:
* * * * * ulimit -u > ulimit.txt
我得到了相同的结果(无限制,77824).
我试图确定这些设置在哪里,以便我可以改变它们.它们未在我的任何配置文件中设置(.bashrc,/ etc / profile等).这些不会影响cron)也不会影响/etc/security/limits.conf(它是空的).
我已经搜索了谷歌,甚至做了grep -Ir 77824 /,但到目前为止还没有发现任何事情.我不明白这些机器如何预设不同的限制.
我实际上不知道这些机器,但是对于一台限制为1024的不同(CentOS 6)机器,这个机器太小了.我需要运行具有更高限制的cron作业,而我知道如何设置它的唯一方法是在cron作业本身.没关系,但我宁愿在系统范围内进行设置,所以它并不像hacky那样.
谢谢你的帮助.这似乎应该很容易(不).
编辑 – 已解决
好的,我想出来了.这似乎是CentOS 6或我的机器配置的问题.在CentOS 5配置中,我可以在/etc/security/limits.conf中设置:
* - nproc unlimited
这将有效地更新帐户和cron限制.但是,这在我的CentOS 6盒子中不起作用.相反,我必须这样做:
myname1 - nproc unlimited myname2 - nproc unlimited ...
事情按预期工作.也许UID规范适用,但通配符(*)肯定不在这里.奇怪的是,通配符可以用于nofile限制.
我仍然想知道默认值实际来自哪里,因为默认情况下,这个文件是空的,我看不出为什么我有两个CentOS盒的默认值不同,它们具有相同的硬件并来自同一个提供者.
解决方法
> Linux内核在启动时(到init进程),
>继承,来自父进程的限制(在fork(2)时间),
> PAM用户会话打开时(可以替换内核/继承值),
>进程本身(可以替换PAM和内核/继承值,请参阅setrlimit(2)).
普通用户的流程不能超越硬限制.
Linux内核
在引导时,Linux为init进程设置默认限制,然后由所有其他(子进程)进程继承.要查看这些限制:cat / proc / 1 / limits.
例如,最大文件描述符数(ulimit -n)的内核默认值为1024/1024(软,硬),Linux 2.6.39中为has been raised到1024/4096.
您正在谈论的默认最大进程数量约为is limited to:
Total RAM in kB / 128
对于x86架构(至少),但是发行版有时会更改默认内核值,因此请检查内核源代码中的kernel / fork.c,fork_init(). “进程数”限制在那里称为RLIMIT_NPROC.
PAM
通常,为了确保登录时的用户身份验证,PAM与一些模块一起使用(请参阅/etc/pam.d/login).
在Debian上,负责设置限制的PAM模块位于:/lib/security/pam_limits.so.
该库将从/etc/security/limits.conf和/etc/security/limits.d/*.conf中读取其配置,但即使这些文件为空,pam_limits.so也可能使用硬编码的值,您可以在源代码.
例如,在Debian上,库has been patched默认情况下,最大进程数(nproc)是无限制的,最大文件数(nofile)是1024/1024:
06001
因此,请检查您的CentOS’PAM模块源代码(查找RLIMIT_NPROC).