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

4

我需要在一个由大约100台机器组成的集群上执行一个进程。因此,我不能手动执行进程,我必须通过脚本来执行它们(该脚本使用ssh,目前我正在使用python-paramiko)。这些进程打开的tcp套接字数量超过了1024个(linux的默认限制)。因此,我需要使用{ulimit -n 10000}来更改它。这只会对当前的shell会话产生影响。而且,这个命令只适用于root用户。因此,我的脚本无法执行此操作。 我尝试执行这个命令。

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

但这并没有起作用。在“sudo su”之后的命令根本没有执行。只有当我注销su会话时,它们才会执行。 这篇文章展示了使更改永久化的方法。但是当我打开limits.conf时,我发现里面什么都没有。它只有一些被注释的说明。 请建议一些方法来永久增加限制或通过脚本为每个会话更改它。

1
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。另请参阅我应该在哪里发布Dev Ops相关问题? - jww
1个回答

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 将始终成功完成。


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