我在服务器上安装了Ubuntu 12.04。每个注册用户也注册为linux用户&通过/etc/security/limits.conf监控有限的系统资源访问。
我尝试将服务器作为注册用户之一运行。该应用是一个nodejs应用 - http://github.com/pocha/terminal-codelearn。它使用https://github.com/chjj/pty.js为每个访问nodejs app的用户创建一个Pseudo Terminal。
应用失败,并且'forkpty(3)失败'错误指向https://github.com/chjj/pty.js/blob/65dd89fd8f87de914ff1814362918d7bd87c9cbf/src/unix/pty.cc的第184行
pid_t pid = pty_forkpty(&master, name, NULL, &winp);
if (pid) {
for (i = 0; i < argl; i++) free(argv[i]);
delete[] argv;
for (i = 0; i < envc; i++) free(env[i]);
delete[] env;
free(cwd);
}
switch (pid) {
case -1:
return ThrowException(Exception::Error(
String::New("forkpty(3) failed.")));
我能够在http://nitrous.io上成功部署该应用。他们可能有类似于jail用户的方式。我试过运行ulimits -a
&amp;匹配除待处理信号之外的每个值。在我的服务器上,最大挂起信号值不超过约90k值,而在Nitrous服务器上则为584k。
以下是Nitrous服务器的ulimit -a输出
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 548288
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 512
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
应用程序在heroku上失败并出现类似的错误。
任何人都可以帮助我在我的服务器上运行如何在nitrous.io上运行应用程序
答案 0 :(得分:0)
我知道heroku无法分叉,因为它们实际上并没有运行POSIX,只是非常像posix一样。所以有些事情,比如forkpty,就是行不通。我不认为有办法解决这个问题:(希望有。
答案 1 :(得分:0)
我不确定我是否理解POSIX类型。但我发现在我的监狱环境中没有/ dev / ptmx&amp; / dev / pts / *。我google了&amp;创造了他们&amp;它开始工作了。