きれいなログインシェルを使用してスクリプトを実行する方法

きれいなログインシェルを使用してスクリプトを実行する方法

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 start4096があります。問題は、スクリプトを手動で実行したときに16384を取得する方法です。

PSの編集bashrcbash_profile助けなしulimit -n <number>

答え1

ルートのみが現在ハード制限を増やすことができます。おそらく、このユーザーのデフォルトの制限は/etc/security/limits.conf16384ですが、初期化ファイルの一部はこの制限を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などから呼び出します。後でこれをサービスとして構成する場合(通常はそうです)、操作はすでに完了しています。

関連情報