1

在 AWS Ubuntu AMI 上启动 xsp4 服务器时出现错误。错误是initialize: mono_thread_create_internal () failed,然后:

执行本机代码时收到 SIGABRT。这通常表示单声道运行时或您的应用程序使用的本机库之一中存在致命错误。

在我自己的计算机上执行相同的命令没有错误。知道错误是什么 - 可能是缺少包、某些配置或类似的东西?

编辑:嗯,这很奇怪,当我通过 ssh 登录并手动运行命令时它正在工作。但是,我需要在 CloudFormation 期间运行它,但它在那里失败了。可能在 CloudFormation 期间某些内容尚未完全设置,或者用户帐户不同?但是再想一想,CloudFormation 不是以 root 身份运行的吗?

完整日志:

+ xsp4 --port 80
Cloud-init v. 0.7.9 在 2017 年 10 月 22 日星期日 17:18:30 +0000 运行“modules:final”。上升 12.78 秒。
Cloud-init v. 0.7.9 于 2017 年 10 月 22 日星期日 17:19:27 +0000 完成。数据源 DataSourceEc2。上升 69.50 秒
xsp4
监听地址:0.0.0.0
根目录:/var/www/HelloWebApi
监听端口:80(非安全)
点击 Return 停止服务器。
服务器未启动。
  在 Mono.WebServer.ApplicationServer.Stop () in :0
  在 (wrapper remoting-invoke-with-check) Mono.WebServer.ApplicationServer:Stop ()
  在 Mono.WebServer.XSP.Server.DebugMain (System.String[] args, Boolean root, IApplicationHost ext_apphost, Boolean quiet) in :0
初始化:mono_thread_create_internal () 失败
堆栈跟踪:

  在  
  在(包装器托管到本机)System.Net.Sockets.Socket.socket_pool_queue(System.Net.Sockets.SocketAsyncCallback,System.Net.Sockets.SocketAsyncResult)
  在 System.Net.Sockets.Socket.QueueSocketAsyncResult (System.Collections.Generic.Queue`1,System.Net.Sockets.SocketAsyncWorker,System.Net.Sockets.SocketAsyncResult)
  在 System.Net.Sockets.Socket.AcceptAsync (System.Net.Sockets.SocketAsyncEventArgs)
  在 Mono.WebServer.ApplicationServer.RunServer ()
  在 System.Threading.ThreadHelper.ThreadStart_Context (对象)
  在 System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool)
  在 System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool)
  在 System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext,System.Threading.ContextCallback,object)
  在 System.Threading.ThreadHelper.ThreadStart ()
  在(包装器运行时调用) object.runtime_invoke_void__this__ (object,intptr,intptr,intptr)

本机堆栈跟踪:

        /usr/bin/mono() [0x49ff2f]
        /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390) [0x7f39c549b390]
        /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7f39c50f5428]
        /lib/x86_64-linux-gnu/libc.so.6(中止+0x16a) [0x7f39c50f702a]
        /usr/bin/mono() [0x630409]
        /usr/bin/mono() [0x63069c]
        /usr/bin/mono() [0x63076f]
        /usr/bin/mono() [0x58e6e5]
        [0x4044ec36]

来自 gdb 的调试信息:


==================================================== ================
执行本机代码时收到 SIGABRT。这通常表明
单声道运行时或本机库之一中的致命错误
由您的应用程序使用。
==================================================== ================
4

1 回答 1

1

如果它在 SSH 之后运行而不是直接运行,则很可能是 TTY 缺失问题。如果您的服务器需要 TTY,那么它不会以这种方式启动

正如您在回复中提到的那样,如果您不想要该行为,则xsp4等待输入键退出并采取,那么您应该使用该参数。--nonstop它将确保不需要 TTY。

如果可执行文件实际上仍然需要 TTY,那么您可以查看该script命令。它确实分配了一个 TTY 并执行了命令。请参阅下面的更多细节

http://man7.org/linux/man-pages/man1/script.1.html

于 2017-10-29T12:14:49.117 回答