7

次のスクリプトがあります。

cat > /tmp/script.sh <<EndOfScript
#!/bin/sh
ulimit -n 8192
run_app
EndOfScript

ローカルでスムーズに実行され、常に問題ありません。しかし、ssh を介してリモートで実行しようとすると、次のようになります。

scp /tmp/script.sh user@host:/tmp/script.sh
ssh user@host "chmod 755 /tmp/script.sh; /tmp/script.sh"

エラーが発生しました:

ulimit: open files: cannot modify limit: Operation not permitted

次のコマンドも試しました。

ssh user@host "ulimit -n 8192"

同じエラー。

ssh リモート コマンドの実行により、nofile 制限に 1024 のハード リミットが適用されているようですが、このデフォルト値を変更する方法がわかりません。/etc/security/limits.conf を変更して sshd を再起動しようとしましたが、それでも同じエラーが発生します。

4

4 に答える 4

13

の回避策を使用する代わりに(そしてそのファイルにタイプミスをしないでください.. :)、で行った設定を尊重し/etc/initscriptたいだけの場合は、、リスト(または他の方法でそうします)。sshd/etc/security/limits.confUsePAM yes/etc/ssh/sshd_config/etc/pam.d/sshdsession required pam_limits.so

それがすべてであるはずです。

古いバージョンのodopenssh(<3.6程度)では、UsePrivilegeSeparationにも問題があり、制限が守られませんでしたが、新しいバージョンでは修正されました。

于 2010-11-02T15:12:54.453 に答える
4

Fiannly は答えを見つけました: 以下を /etc/initscript に追加します

ulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
于 2009-12-22T04:03:35.613 に答える
2

ulimit実行するにはスーパーユーザー権限が必要です。

スクリプトを実行しようとしているサーバーで、サーバー管理者にその値を変更するよう依頼することをお勧めします。

Linux で /etc/secutiry/limits.conf を変更することで、これを行うことができます。役立つ例を次に示します。

*               soft    nofile          8192
*               hard    nofile          8192

その後、sshd を再起動する必要はありません。ログアウトして再度ログインするだけです。

ただし、 ServerFaultで同じ質問をすることをお勧めします。そこでは、サーバー側に関連するより良い回答が得られます。

于 2009-12-11T11:17:10.663 に答える
1

への呼び出しについて、起動スクリプト ( /etc/profile、 ) を確認してください。IIRC では、いったん制限が課されると、それ以上広げることはできません。~/.??*ulimit

于 2009-12-11T11:42:38.437 に答える