在我的rails应用程序中,我运行一个外部进程,这个进程可能非常消耗资源,具体取决于我传递的输入。因此,我希望确保它不会占用太多时间,并且我希望更改ulimit。
ulimit在我的shell中运行良好,但很快我尝试在rails中更改它,我得到了一个无效的参数。
$ rails c
[1] pry(main)> `/usr/bin/ulimit -Ht`
=> "unlimited\n"
[2] pry(main)> `/usr/bin/ulimit -Ht 1`
/usr/bin/ulimit: line 4: ulimit: cpu time: cannot modify limit:
Invalid argument这不是一个语法问题,因为:
[1] pry(main)> `/usr/bin/ulimit -Ht 'unlimited'`
=> ""
[2] pry(main)> `/usr/bin/ulimit -Ht 'wrongparam'`
/usr/bin/ulimit: line 4: ulimit: wrongparam: invalid number
=> ""这也不是权限问题:
[5] pry(main)> `sudo ulimit -Ht 1`
Password:
/usr/bin/ulimit: line 4: ulimit: cpu time: cannot modify limit: Invalid argument更改软限制效果很好:
[10] pry(main)> `ulimit -St 1; ulimit -St`
=> "1\n"更改启动rails的shell中的硬限制也是有效的。
有什么想法吗?
发布于 2015-03-14 00:12:21
ulimit不限制执行时间,只限制cpu时间,因此它可能不会产生您想要的确切效果。你可以看看timeout
如果您执意要使用ulimit,那么最好的方法就是创建一个您可以调用的shell脚本,而不是尝试在ruby中直接调用ulimit。ulimit通常是shell的一个函数,因此最好这样运行它。
像这样的东西可能会起作用:
#!/bin/bash
ulimit -Ht 1 && whateveryouaretryingtorun $1 然后把它叫做
%x{./path/to/script arguments}我还没有亲自测试过这一点,因为ulimit是内置在zsh中的,所以在那个上下文中调用它有点不同。
https://stackoverflow.com/questions/29036534
复制相似问题