ActiveMQ-CPPのCラッパーであるfusemqを使用しています。
問題は、Apacheサーバーモジュールでブローカーを使用していることです。別のプログラムがメッセージを消費できるように、ブローカーにメッセージを送信することになっています。これらすべてをテストするスクリプトがあり、メッセージが正常に送信されたかどうかを通知するモジュールにログインしています。 Apacheがrootとして正常に起動され、ActiveMQがrootとして起動されると、スクリプトがスタックします。トレースバックは、まだ応答を待っていたと言っています。私のログで、モジュールがブローカーとのデフォルトセッションの作成でスタックしていることに気づきました。これらの同じ状況でGDBのモジュールをステップスルーすると、メッセージは正常に送信され、管理パネルにキューにメッセージがあると表示されます。モジュールを実行すると、Apacheユーザーとしてすべてが実行されるため、それが問題だと思いました。そのため、サーバーを通常どおり起動し、ActiveMQをApacheとして実行します。これを行うと、メッセージが正常に送信されたことがログに示され、スクリプトは完了しますが、管理パネルにアクセスできません。
503からのactivemq.log出力:
2013-05-28 13:47:51,823 | WARN | Committed before 503 null | org.Eclipse.jetty.server.Response | qtp1146944158-23
2013-05-28 13:47:51,824 | WARN | /admin/ | org.Eclipse.jetty.server.AbstractHttpConnection | qtp1146944158-23
Java.lang.IllegalStateException: Committed
at org.Eclipse.jetty.server.Response.resetBuffer(Response.Java:1126)
at org.Eclipse.jetty.server.Response.sendError(Response.Java:313)
at org.Eclipse.jetty.server.Response.sendError(Response.Java:415)
at org.Eclipse.jetty.server.handler.ContextHandler.checkContext(ContextHandler.Java:820)
at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:916)
at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:135)
at org.Eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.Java:154)
at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:521)
at org.Eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.Java:154)
at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:116)
at org.Eclipse.jetty.server.Server.handle(Server.Java:363)
at org.Eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.Java:483)
at org.Eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.Java:920)
at org.Eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.Java:982)
at org.Eclipse.jetty.http.HttpParser.parseNext(HttpParser.Java:635)
at org.Eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.Java:235)
at org.Eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.Java:82)
at org.Eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.Java:627)
at org.Eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.Java:51)
at org.Eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.Java:608)
at org.Eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.Java:543)
at Java.lang.Thread.run(Thread.Java:722)
編集:ActiveMQがApacheとして実行され、サーバーがrootであり、スクリプトがハングしているときに、サーバーに対してスクリプトを再実行しています。デフォルトのセッションの作成で行き詰まっています。 GDBをステップスルーしても、それでも機能します...
編集:私はsetenforce 0を実行し、すべてが機能しました。なぜそうなるのかわからない。何か案は?
時間->火6月4日08:47:402013
type=SYSCALL msg=audit(1370357260.183:29896): Arch=c000003e syscall=21 success=no exit=-13 a0=c050b0 a1=7 a2=20 a3=a0 items=0 ppid=2618 pid=2633 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=2 comm="gdm-session-wor" exe="/usr/libexec/gdm-session-worker" subj=system_u:system_r:xdm_t:s0-s0:c0.c1023 key=(null)
type=AVC msg=audit(1370357260.183:29896): avc: denied { read } for pid=2633 comm="gdm-session-wor" name="root" dev=dm-0 ino=1835009 scontext=system_u:system_r:xdm_t:s0-s0:c0.c1023 tcontext=system_u:object_r:admin_home_t:s0 tclass=dir
さて、これにつまずいた人が興味を持った場合に備えて、私はなんとか問題を理解することができました。
Selinuxを再度有効にし、ポート61616(openwire接続用のポート)、61613(stomp接続用のポート)、および8161(管理コンソール用のポート)をhttp_port_tの許可リストに追加しました。
私は次のコマンドを使用しました:
semanage port -a -t http_port_t -p tcp [port number]