start-stop-daemonでulimitsを機能させる


21

init.d使用してアプリを起動するスクリプトがありますstart-stop-daemon --chuid SOME_SYSTEM_USER。つまり、アプリはルートではなく別のユーザーで実行されます。

問題は、アプリで特別な制限設定(つまりulimit -n 64000)が必要なことlimits.confです。これは、シェルから直接実行すると非常にうまく機能します:su - SOME_SYSTEM_USER+シェルからアプリを起動します。

ただし、start-stop-daemon --chuidfromを実行すると/etc/init.d、これらの制限は無視されます。その後、明らかにアプリは動作しません。

設定start-stop-daemonを尊重することを強制するにはどうすればよいulimitですか?


Debian Squeeze、2.6.32-5-686#1 SMP 5月5日(土)01:33:08 UTC 2012 i686 GNU / Linux

回答:


24

現時点ではできません。limits.conf(5)はの構成でpam_limits(8)、の構成に従ってPAMスタックによってアクティブ化されます/etc/pam.d。ただし、start-stop-daemon(8)init.dスクリプトから起動されるとPAMスタックを通過しないため、これらの種類の設定は適用されません。

Debianバグ#302079には、からの制限の設定を有効にするパッチが含まれstart-stop-daemon(8)ていますが、バグは2005年から公開されており、パッチはまだマージされていません。

理想的ではありませんが、現時点でこれを達成するための推奨される方法ulimitは、init.dスクリプトに呼び出しを追加することです。


コマンドの直前にulimit設定を追加するだけstart-stop-daemonです。(すなわちulimit -n 64000)...私のような無知な人のために。
ライアンシューマッハ

OPとは異なり、どのデーモンがクラッシュするかわからない場合は、Debian Wheezyがデーモンを再起動したときに良い結果が得られました。echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
マーティンドレイ

いくつかのより多くの貴重な背景情報はここで見つけることができます:serverfault.com/a/642082/22394
sehe

7

upstartスクリプトで「limit」コマンドを使用することもできます。

ファイル/etc/init/foo.confに次の行を追加します。

limit nofile 64000 64000

最初の64000はソフト制限であり、2番目はハード制限です。

詳細については、http//upstart.ubuntu.com/cookbook/をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.