エントリー
RabbitMQサーバーをより詳細に実行すると、少し混乱します。 これがなぜであり、実際にすべてが実際にどのように行われているのかを理解することができます。
- RabbitMQ-Serverバージョン-2.1.0
- OS:Fedora
まもなく
プロセスのPIDを注意深く調べます。 以下は何が起こっているかの説明です。
-bash-3.2# /etc/init.d/rabbitmq-server start root 7732 3834 0 11:54 pts/0 00:00:00 /bin/sh /etc/init.d/rabbitmq-server start root 7733 7732 0 11:54 pts/0 00:00:00 /bin/sh /usr/sbin/rabbitmq-multi start_all 1 root 7740 7733 0 11:54 pts/0 00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-multi "start_all" "1" rabbitmq 7741 7740 7 11:54 ? 00:00:00 /usr/lib64/erlang/erts-5.7.5/bin/beam.smp -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server- 2.1.0/sbin/../ebin -noshell -noinput -hidden -K true -sname rabbitmq_multi7741 -s rabbit_multi -extra start_all 1 rabbitmq 7767 7741 0 11:54 ? 00:00:00 inet_gethost 4 rabbitmq 7768 7767 0 11:54 ? 00:00:00 inet_gethost 4 rabbitmq 7769 7741 0 11:54 ? 00:00:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server -noinput rabbitmq 7794 7769 0 11:54 ? 00:00:00 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server -noinput rabbitmq 7795 7794 0 11:54 ? 00:00:00 ps -ef rabbitmq 7796 7794 0 11:54 ? 00:00:00 grep rabbit -bash-3.2# echo $$ 3834
詳細
- シェルから(PID = 3834)/etc/init.d/rabbitmq-server startが開始されました。
- init.dスクリプト(PID = 7732)では、conf。 ファイル/ etc / sysconfig / rabbitmq;
- シェルスクリプトsu rabbitmq -s / bin / sh -c / usr / lib / rabbitmq / bin / rabbitmq-multi "start_all" "1"は、init.dスクリプトから開始されます; PID = 7740; それから、(ソース)/ usr / lib / rabbitmq / bin / rabbitmq-evnがロードされ、そこに/etc/rabbimq/rabbitmq.confがロードされます
- / usr / lib / rabbitmq / bin / rabbitmq-multi erlangで、いくつかのパラメーターを設定して開始します(PID = 7741)。 最も興味深いのは-s rabbit_multiです。 start(man erl)の代わりに呼び出される指示関数。
- 起動されたerlangアプリケーションから、シェルスクリプト/ bin / sh / usr / lib / rabbitmq / bin / rabbitmq-server -noinput(PID = 7769)が起動され、rabbitmq-server自体が起動します。
シェルスクリプトが呼び出されるrabbit_mulri.erlのコードを次に示します。
220 run_rabbitmq_server() -> 221 with_os([{unix, fun run_rabbitmq_server_unix/0}, 222 {win32, fun run_rabbitmq_server_win32/0}]). 223 224 run_rabbitmq_server_unix() -> 225 CmdLine = getenv("RABBITMQ_SCRIPT_HOME") ++ "/rabbitmq-server -noinput", 226 erlang:open_port({spawn, CmdLine}, [nouse_stdio]). 227 228 run_rabbitmq_server_win32() -> 229 Cmd = filename:nativename(os:find_executable("cmd")), 230 CmdLine = "\"" ++ getenv("RABBITMQ_SCRIPT_HOME") 231 ++ "\\rabbitmq-server.bat\" -noinput", 232 erlang:open_port({spawn_executable, Cmd}, 233 [{arg0, Cmd}, {args, ["/q", "/s", "/c", CmdLine]}, 234 nouse_stdio, hide]).
このような自明でない起動プロセスは、アプリケーション自体のマルチプラットフォームの性質により明らかに行われます。
環境変数
これで、rabbitmq-serverの起動プロセスがどのように発生するかは理解できましたが、それに影響を与える方法については理解できません。 erlangアプリケーション自体の起動について詳しく見てみましょう。
ランチャーの起動(rabbit_multi)
exec erl \ -pa "${RABBITMQ_HOME}/ebin" \ -noinput \ -hidden \ ${RABBITMQ_MULTI_ERL_ARGS} \ -sname rabbitmq_multi$$ \ -s rabbit_multi \ ${RABBITMQ_MULTI_START_ARGS} \ -extra "$@"
サーバー起動
exec erl ${RABBITMQ_EBIN_PATH} ${RABBITMQ_START_RABBIT} -sname ${RABBITMQ_NODENAME} -boot ${RABBITMQ_BOOT_FILE} ${RABBITMQ_CONFIG_ARG} +W w \ ${RABBITMQ_SERVER_ERL_ARGS} \ ${RABBITMQ_LISTEN_ARG} \ -sasl errlog_type error \ -kernel error_logger '{file,"'${RABBITMQ_LOGS}'"}' \ -sasl sasl_error_logger '{file,"'${RABBITMQ_SASL_LOGS}'"}' \ -os_mon start_cpu_sup true \ -os_mon start_disksup false \ -os_mon start_memsup false \ -mnesia dir "\"${RABBITMQ_MNESIA_DIR}\"" \ ${RABBITMQ_SERVER_START_ARGS} \ "$@"
これで、どの環境変数が各アーランプロセスに影響するかが明確になったと思います。 / usr / lib / rabbitmq / bin / rabbitmq-multiの起動時に読み込まれる/etc/rabbitmq/rabbitmq.confのこれらのパラメーターを変更することをお勧めします。
exec erl -noinput -sname rabbit@hostname -boot /var/lib/rabbitmq/mnesia/rabbit@hostname/plugins-scratch/rabbit \ -config /etc/rabbitmq/rabbitmq +W w +K true +A30 +P 1048576 -kernel inet_default_listen_options [{nodelay,true}] \ -kernel inet_default_connect_options [{nodelay,true}] \ -sasl errlog_type error -kernel error_logger '{file,'/var/log/rabbitmq/rabbit@hostname.log'}' \ -sasl sasl_error_logger '{file,'/var/log/rabbitmq/rabbit@hostname-sasl.log'}' \ -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@hostname" -noinput
confの結果。 ファイル
その結果、3つのconfがrabbitmq-serverの作業を担当します。 ファイル:
- / etc / sysconfig / rabbitmq; -低レベルのパラメーター(ulimitなど)を示すのが慣例です
- /etc/rabbitmq/rabbitmq.conf; -erlangを実行するための環境変数の構成
- /etc/rabbitmq/rabbitmq.config。 -Rabbitmq-server自体が構成されています
この記事が時間を節約することを願っています。 サーバーの動作に影響する変数に設定する値については、すでに個人的な問題です。 あとでこれについて書きます。