質問
私は次のスクリプトを持っています:
cat > /tmp/script.sh <<EndOfScript
#!/bin/sh
ulimit -n 8192
run_app
EndOfScript
ローカルでスムーズに実行され、それは常にokです。しかし、私は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を変更しようとした、まだ同じエラーます。
解決 2
Fiannlyは答えを考え出します。/ etc / initスクリプト
に以下を追加しますulimit -c unlimited
ulimit -HSn 65535
# Execute the program.
eval exec "$4"
他のヒント
の代わりに、/etc/initscript
の回避策を使用して(と、そのファイルのタイプミスをしない.. :)、あなたはちょうどあなたがsshd
で行った設定を称えるために/etc/security/limits.conf
は、あなたがUsePAM yes
に/etc/ssh/sshd_config
ていることを確認する必要がありたい場合や/etc/pam.d/sshd
リストはsession required pam_limits.so
(あるいはそうする他のファイルが含まれます)。
これがあるべきすべてのことにあります。
古いバージョンでのOpenSSH(<3.6何かを)OD限界が表彰される防止のUsePrivilegeSeparationとの問題もあったが、それは新しいバージョンで修正された。
ulimit
の実行にはスーパーユーザ権限が必要です。
私はあなたが上でスクリプトを実行しようとしているサーバー上で、あなたのためにその値を変更するために、サーバー管理者に依頼することができお勧めします。
彼/彼女は、Linux上で/etc/secutiry/limits.conf変更することによって、それを行うことができます。ここでは役立つかもしれない例があります:
* soft nofile 8192
* hard nofile 8192
その後、あなたはSSHDを再起動する必要はありません。ただ、ログアウトして再度ログインします。
私はしかし ServerFaultのの中に同じ質問をするためにあなたをお勧めします。あなたはそこに優れたサーバー側関連の回答を得るでしょう。
/etc/profile
への呼び出しのために起動スクリプト(~/.??*
、ulimit
)を確認してください。制限が課された後IIRC、それはもはや広げることができません。