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-daemon
にulimit
の設定を強制する方法を教えてください。
Debian Squeeze、2.6.32-5-686#1 SMP、5月5日01:33:08 UTC 2012 i686 GNU/Linux
現時点ではできません。 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スクリプトに追加することです。
Upstartスクリプトで 'limit'コマンドを使用することもできます。
/etc/init/foo.confファイルに次の行を追加します。
limit nofile 64000 64000
最初の64000はソフト制限で、2番目はハード制限です。
詳細については、こちらをご覧ください: http://upstart.ubuntu.com/cookbook/