我有以下脚本:
cat > /tmp/script.sh <<EndOfScript
#!/bin/sh
ulimit -n 8192
run_app
EndOfScript
在本地运行顺利,总是好的。但是,如果我尝试通过ssh远程运行它:
scp /tmp/script.sh user@host:/tmp/script.sh
ssh user@host "chmod 755 /tmp/script.sh; /tmp/script.sh"
我收到了错误:
ulimit: open files: cannot modify limit: Operation not permitted
我也尝试了以下命令:
ssh user@host "ulimit -n 8192"
同样的错误。
看起来ssh远程命令执行对nofile限制强制执行1024次硬限制,但我无法找到如何修改此默认值。我试图修改/etc/security/limits.conf并重启sshd,仍然是同样的错误。
答案 0 :(得分:11)
而不是使用/etc/initscript
的解决方法(并且不要在该文件中输入错误... :),如果您只是希望sshd
兑现您在/etc/security/limits.conf
中所做的设置,您应该确保UsePAM yes
中有/etc/ssh/sshd_config
,/etc/pam.d/sshd
列出session required pam_limits.so
(或者包含其他文件)。
这应该就是它的全部内容。
在早期版本的od openssh(&lt; 3.6 something)中,UsePrivilegeSeparation也存在一个问题,它阻止了限制,但它在较新版本中得到修复。
答案 1 :(得分:3)
Fiannly想出答案:将以下内容添加到/ etc / initscript
ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
答案 2 :(得分:2)
ulimit
需要超级用户权限才能运行。
我建议您让服务器管理员在您尝试运行脚本的服务器上为您修改该值。
他/她可以通过在Linux上修改/etc/secutiry/limits.conf来实现。以下是一个可能有用的示例:* soft nofile 8192
* hard nofile 8192
之后,您无需重新启动sshd。只需注销并再次登录。
我建议你在ServerFault中提出同样的问题。那里你会得到更好的服务器端相关答案。
答案 3 :(得分:0)
检查启动脚本(/etc/profile
,~/.??*
)是否有对ulimit
的调用。 IIRC,一旦达到限制,就不能再扩大了。