SSHを介してリモートシステムLinux RH6(サーバーからキーを取得する)に直接接続していますが、Javaサービスを再起動するためにパラメータを含むシェルスクリプトを実行すると、奇妙なulimitの問題が発生します。
- 手動で実行すると、
./script.sh stop;./catalina.sh start
開かれたファイルの数はシステムファイルで定義されているように正常(1024)ではありませんlimits.conf
。 - 設定した週間ジョブを実行すると
cron
(16,384)、正しい値が得られます。limits.conf
- これを実行して
/bin/su - user
から再起動して
も正しい値になります。
どういうわけか私のシステム値を取得し、bashスクリプト内に実際のログインシェルを持ち、サービスを手動で再起動する必要がある場合は、正しい数のオープンファイルを持つようにスクリプトを変更するソリューションが必要です。
現在のシェルの厳格な制限:
ulimit -Ha
open files (-n) 4096
グローバル:
cat /etc/security/limits.conf
oracle hard nofile 16384
問題:cronジョブを実行しているときに現在のシェルでスクリプトを実行すると、開いているファイル数は16384個です。/script.sh stop; ./script.sh start
4096があります。問題は、スクリプトを手動で実行したときに16384を取得する方法です。
PSの編集bashrc
とbash_profile
助けなしulimit -n <number>
。
答え1
ルートのみが現在ハード制限を増やすことができます。おそらく、このユーザーのデフォルトの制限は/etc/security/limits.conf
16384ですが、初期化ファイルの一部はこの制限を4096に設定します。
可能であれば、この初期化ファイルを変更してソフト制限のみを設定してください。すべてのユーザーはいつでも任意の方向にソフト制限を変更でき、唯一の制限はハード制限より高くすることはできません。ulimit -a 4096
に置き換えられますulimit -Sa 4096
。
とにかく、あなたがすることは疑わしいです。サービスを実行しているユーザーとしてシェルを実行しないでください。必要に応じてsudo
別の権限でコマンドを実行して、アカウントでそれらを維持する必要があります。したがって、サービスを開始するには使用しないで./script.sh stop;./catalina.sh start
ください。
sudo -u user ./script.sh stop; sudo -u user ./catalina.sh start
これにより、制限が低くなる可能性のある初期化ファイルは実行されません。
原則として、システム構成は、ログイン方法に応じてPAM(/etc/pam.conf
または)別の規則を介して/etc/pam.d/*
異なる制限を設定できます。しかし、これは奇妙で珍しい構成です。
答え2
./script.sh stop;./catalina.sh start
手動で実行し、同じ機能を持つ別々のcronjobを使用する代わりに、/etc/init.d/catalina
すべての制限、環境変数などを構成するスクリプトを使用して起動/停止またはsudo /etc/init.d/catalina start
(またはstop
などrestart
)簡単に実行できます。使用可能(sudo service catalina start
など、ちょっと待ってください)。ご存知のように、他の環境でプロセスを開始/停止するとエラーが発生しやすくなります。すべてをinitスクリプトに配置すると、プロセスを一貫してきちんと起動/停止するのに役立ちます(そして正しく記録します)。
編集:そして、initスクリプトを使用しないsudo
か使用しない場合は、同じスクリプトを作成し(initスクリプトを生成するのと同じ)、その$HOME/bin
スクリプトの内部に保存します。環境(制限、環境変数など)必要に応じて、cron、Shell、リモートSSH、Puppetなどから呼び出します。後でこれをサービスとして構成する場合(通常はそうです)、操作はすでに完了しています。