web-dev-qa-db-ja.com

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

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

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

ただし、start-stop-daemon --chuidから/etc/init.dを実行すると、これらの制限は無視されます。その後、アプリが機能しなくなります。

start-stop-daemonulimitの設定を強制する方法を教えてください。


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

20
user124114

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

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

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

23
rtandy

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

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

limit nofile 64000 64000

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

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

7
dtynan