1

サーバーにUbuntu 12.04をセットアップしています。登録されたすべてのユーザーは、Linux ユーザーとしても登録され、 /etc/security/limits.conf を通じてシステム リソースへのアクセスが制限されます。

登録ユーザーの 1 人としてサーバーを実行してみました。アプリは nodejs アプリです - http://github.com/pocha/terminal-codelearnhttps://github.com/chjj/pty.jsを使用して、nodejs アプリにアクセスするすべてのユーザーに対して疑似ターミナルを作成します。

https://github.com/chjj/pty.js/blob/65dd89fd8f87de914ff1814362918d7bd87c9cbf/src/unix/pty.ccの 184 行目に「forkpty(3) failed」エラーが表示されてアプリが失敗する

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にアプリを正常にデプロイできました。彼らはおそらく刑務所のユーザーと同様の方法を持っています。ulimits -a保留中のシグナルを除くすべての値を実行して一致させてみました。私のサーバーではどういうわけか、Nitrous サーバーでは 584k ですが、保留中の信号の最大値は約 90k の値を超えません。

以下は、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で失敗し、まったく同様のエラーが発生します。

nitros.ioで動作するように、サーバーでアプリを実行する方法について誰か助けてもらえますか

4

2 に答える 2

0

POSIX 型を理解しているかどうかわかりません。しかし、投獄された環境には /dev/ptmx & /dev/pts/* がないことがわかりました。私はグーグルでそれらを作成し、それが機能し始めました。

于 2013-07-25T04:56:53.573 に答える
0

heroku は実際には POSIX を実行していないため、forkpty に失敗することを知っています。そのため、forkpty のように機能しないものもあります。それを回避する方法はないと思います:(あったらいいのに。

于 2013-07-24T04:32:41.943 に答える