2016-12-25 3 views
4

私はマシンのクラスタ上でプロセスを実行する必要があります。クラスタのサイズは100です。私は手動でプロセスを実行することはできませんので、スクリプトで実行する必要があります(これはsshを使用していますが、現在はpython-paramikoを使っています)。これらのプロセスがオープンするtcpソケットの数は1024以上です(Linuxのデフォルト制限)。したがって、{ulimit -n 10000}を使用して変更する必要があります。これにより、そのシェルセッションの変更のみが行われます。このコマンドはrootユーザーでのみ動作します。だから私のスクリプトはそれをすることができません。 このコマンドを実行しようとしましたLinux:プロセスが開くことができるファイルの最大数を変更するには?

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

これは機能しませんでした。 "sudo su"の後のコマンドはまったく実行されませんでした。これらは、私がsuセッションをログアウトしたときにだけ実行されます。 Thisの記事は、変更を永久に行う方法を示しています。しかし、limits.confを開くと、そこに何も見つかりませんでした。それはいくつかのコメントされたノートしか持っていません。

制限を永久に増やす方法や、セッションごとにスクリプトで変更する方法を提案してください。

+1

スタックオーバーフローは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 [Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306)も参照してください。 – jww

答えて

1

これは動作しません:sudo suは、新しいシェルをオープンするだけで、rootとしてコマンドを導入することができます。そして、そのシェルを終了すると、通常のユーザーとして残りの行を実行します。

第二:あなたのulimitは実際のプログラムではなく、bashシェルは、組み込みコマンドなので、それはbashの内で使用しなければならないので、これはsudo ulimit -n 10000ような何かが動作しません理由がある、特殊なケースである:sudoすることができますそのプログラムは存在しないので見つからない。

だから、唯一の選択肢は少し醜いですが、動作します:'...'内部

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

すべてはrootユーザのbashのセッションで実行されます。

この場合、&&;に置き換えることができます。これは、ルートとして実行されており、ulimit -n 10000が常に正常に完了するためです。

関連する問題