我有一个 daemontools 服务,其/service/myservice/run
包含:
#!/bin/sh
exec setuidgid someuser somecommand
现在,如果我直接从 root shell 将其作为脚本运行,somecommand
将获得正确的 ulimit(无限制)。
但是,当我使用启动服务时
svc -u /service/myservice
然后somecommand
得到的 ulimit 实际上略高于 11000。
即使通过 svc 启动(而不是从 shell 启动),我怎样才能让某个命令获得正确的 ulimit?
这是 FreeBSD 9 版本。
答案1
将其ulimit
放在脚本中daemontools
,在 exec 上方。svc
不会将 rlimits 传播到它运行的脚本:
#!/bin/sh
ulimit -n 102400 #Increase file descriptor limit to 102400
exec setuidgid someuser somecommand
答案2
事实上,这就是软限制是为了。
你应该试试:
exec setuidgid someuser softlimit -o 102400 somecommand
看:http://cr.yp.to/daemontools/softlimit.html
请注意,-o 控制软限制的打开文件描述符,而 -n 控制 ulimit。