码迷,mamicode.com
首页 > 其他好文 > 详细

由登录服务器时ulimit配置报错,也谈下ulimit配置

时间:2015-04-23 21:20:34      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

最近在登录开发机时,有报错如下:

-bash:  cannot modify limit: Operation not permitted

 

一定是哪个地方有ulimit设置,想想看,用户登录或用户su命令切换时,系统会调用以下脚本: 

    /etc/profile.d/file 
    /etc/profile 
    /etc/bashrc 
    /lebyzhao/.bashrc 
    /lebyzhao/.bash_profile 

可能是这里面有ulimit -n的配置,检查一下,果然在/etc/profile中,有行ulimit -n 65535

当你以lebyzhao登录时,你不是root,没有权限执行,才显示了上面的报错。

这里注释掉/etc/profile这行即无报错。

 

ulimit -n配置很关键,所以这里在啰嗦一下,因为这个和当前登录session、用户甚至用户组limits配置相关,有时看起来很蹊跷。

除了应用ulimit -n, 也可以修改linux的软硬件限制文件/etc/security/limits.conf:

    如添加如下代码: 
    * soft nofile 65535 
    * hard nofile 65535 
    所有用户打开的文件数被限制为65535。简单解释下这里命令格式是users type item value,users是以符号@开头的用户名或组名(不加@测试也可以),*表示所有用户,type设置为hard or soft。item指定想限制的资源,如cpu,core nofile nproc or maxlogins,value则就是相应的限制值。

    这样登录的时候pam就会从从limits.conf中设置上限(当然,ulimit命令可以在低于上限的范围内再行设置)

    网上看,好像有内核还提供了设置接口:/proc/sys/fs /nr_open,大家有兴趣可以在搜索看下。

 

    总之,我们用ulimit -n 命令在本次shell session中、服务器进程启动(脚本)时、用户登录如/etc/profile里进行设置,或者设置limits.conf,都可以达到你的目的,场景和优劣也很明显。

 

    如果你还有兴趣:我们用sudo limit -n 65536测试设置时,会提示找不到命令,原因是ulimit 和cd等一样,是内核内建的指令,并不是/usr/sbin等下面的二进制程序命令。那请问一下,如果非要在自己(非root)登录后设置,是否可以这样:sudo sh -c "ulimit -n 65535"?结合sudo、用户来看,也不难理解可行与否了。

由登录服务器时ulimit配置报错,也谈下ulimit配置

标签:

原文地址:http://www.cnblogs.com/leby/p/4451658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!