我必须在一组机器上执行一个进程。集群的大小为 100。所以我不能手动执行进程,我必须通过脚本执行它们(它使用 ssh,目前我为此使用 python-paramiko)。这些进程打开的 tcp 套接字数量超过 1024(linux 的默认限制)。所以我需要使用 {ulimit -n 10000} 更改它。这只会对该 shell session 进行更改。并且此命令仅适用于 root 用户。所以我的脚本无法做到这一点。 我尝试执行这个命令
sudo su && ulimit -n 10000 && <commandToExecuteMyProcess>
但这没有用。 “sudo su”之后的命令根本没有执行。它们仅在我注销 su session 时执行。 This文章展示了永久进行更改的方法。但是当我打开 limits.conf 时,我在那里找不到任何东西。它只有一些注释。
请建议我一些永久增加限制或通过脚本为每个 session 更改限制的方法。
最佳答案
它不是这样工作的:sudo su
只是打开一个新的 shell,这样您就可以以 root 身份引入命令,并且在您退出该 shell 后,它会以普通用户身份执行该行的其余部分。
第二:你这是一个特例,因为 ulimit
实际上不是一个程序,而是一个 bash shell 内置命令,所以它必须在 bash 中使用,这就是为什么像 >sudo ulimit -n 10000
将不起作用:sudo
找不到该程序,因为它不存在。
所以,唯一的选择有点难看但有效:
sudo bash -c 'ulimit -n 10000 && <command>'
'...'
中的所有内容都将在 root 用户的 bash session 中执行。
请注意,在这种情况下,您可以将 &&
替换为 ;
:那是因为它是以 root 身份执行的,而 ulimit -n 10000
将总是成功完成。
关于Linux:如何更改进程可以打开的最大文件数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322923/