Linux:如何更改进程可以打开的最大文件数?

时间:2016-12-25 16:51:59

标签: linux sockets operating-system system ulimit

我必须在一组机器上执行一个进程。集群的大小是100的顺序。所以我不能手动执行进程,我必须通过脚本执行它们(使用ssh,目前我正在使用python-paramiko)。这些进程打开的tcp套接字数量超过1024(linux的默认限制。)所以我需要使用{ulimit -n 10000}更改它。这仅对该shell会话进行更改。此命令仅适用于root用户。所以我的脚本无法做到这一点。 我试图执行这个命令

sudo su && ulimit -n 10000 && <commandToExecuteMyProcess>

但是这没用。 “sudo su”之后的命令根本没有执行。它们仅在我注销su会话时执行。 This文章显示了永久更改的方法。但是当我打开limits.conf时,我没有找到任何东西。它只有一些注释说明。

请建议我永久性地增加限制或通过脚本为每个会话更改限制。

1 个答案:

答案 0 :(得分:1)

这不是它的工作方式:sudo su只是打开一个新的shell,这样你就可以以root身份引入命令,退出shell后,它会以普通用户的身份执行其余部分。

第二:你的这是一个特例,因为ulimit实际上不是一个程序,而是一个bash shell内置命令,因此它必须在bash中使用,这就是sudo ulimit -n 10000之类的原因不起作用:sudo无法找到该程序,因为它不存在。

所以,唯一的选择是有点难看但有效:

 sudo bash -c 'ulimit -n 10000 && <command>'

'...'内的所有内容都将在root用户的bash会话中执行。

请注意,在这种情况下,您可以将&&替换为;:这是因为它以root身份执行,而ulimit -n 10000将始终成功完成。