it-swarm-ja.com

デーモンツールとulimit

/service/myservice/runに含まれるdaemontoolsサービスがあります。

#!/bin/sh
exec setuidgid someuser somecommand

これをルートシェルから直接スクリプトとして実行すると、somecommandは正しいulimit(無制限)を取得します。

ただし、を使用してサービスを開始すると

svc -u /service/myservice

その場合、somecommandは事実上11000をわずかに超えるulimitを取得します。

(シェルからではなく)svcを介して開始された場合でも、somecommandに正しいulimitを取得させるにはどうすればよいですか?

これはFreeBSD9リリースにあります。

4
oberstet

ulimitdaemontoolsスクリプトのexecの上に置きます。 svcは、実行するスクリプトにrlimitを伝播しません。

#!/bin/sh
ulimit -n 102400 #Increase file descriptor limit to 102400
exec setuidgid someuser somecommand
1
user49740

実際、これがsoftlimitの目的です。

試してみてください:

exec setuidgid someuser softlimit -o 102400 somecommand

参照: http://cr.yp.to/daemontools/softlimit.html

Ulimitの-nとは異なり、-oはsoftlimitのオープンファイル記述子を制御することに注意してください。

4
oo.