我必须在一组机器上执行一个进程。集群的大小是100的顺序。所以我不能手动执行进程,我必须通过脚本执行它们(使用ssh,目前我正在使用python-paramiko)。这些进程打开的tcp套接字数量超过1024(linux的默认限制。)所以我需要使用{ulimit -n 10000}更改它。这仅对该shell会话进行更改。此命令仅适用于root用户。所以我的脚本无法做到这一点。 我试图执行这个命令
sudo su && ulimit -n 10000 && <commandToExecuteMyProcess>
但是这没用。 “sudo su”之后的命令根本没有执行。它们仅在我注销su会话时执行。 This文章显示了永久更改的方法。但是当我打开limits.conf时,我没有找到任何东西。它只有一些注释说明。
请建议我永久性地增加限制或通过脚本为每个会话更改限制。
答案 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
将始终成功完成。