diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 6ff94893c..2ebe43f13 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -477,8 +477,38 @@ listeners([]) -> end, Info) end, esockd:listeners()); +listeners(["reopen", Proto, ListenOn1]) -> + ListenOn = case string:tokens(ListenOn1, ":") of + [Port] -> list_to_integer(Port); + [IP, Port] -> {IP, list_to_integer(Port)} + end, + case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn, []}) of + {ok, _Pid} -> + io:format("Reopen ~p listen on ~p successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn1)]); + {error, Error} -> + io:format("Failed to reopen ~p listen on ~p, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + end; + +listeners(["close", Proto, ListenOn1]) -> + ListenOn = case string:tokens(ListenOn1, ":") of + [Port] -> list_to_integer(Port); + [IP, Port] -> {IP, list_to_integer(Port)} + end, + case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn, []}) of + ok -> + io:format("Close ~p on ~p successfully.~n", + [list_to_atom(Proto), list_to_atom(ListenOn1)]); + {error, Error} -> + io:format("Failed to close ~p on ~p, error:~p~n", + [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error]) + end; + listeners(_) -> - ?PRINT_CMD("listeners", "List listeners"). + ?USAGE([{"listeners", "List listeners"}, + {"listeners reopen ", "Reopen a listener port"}, + {"listeners close ", "Close a listener port"}]). %%-------------------------------------------------------------------- %% Dump ETS diff --git a/src/emqttd_ctl.erl b/src/emqttd_ctl.erl index b309c5c6a..195d3dea0 100644 --- a/src/emqttd_ctl.erl +++ b/src/emqttd_ctl.erl @@ -75,6 +75,8 @@ run([CmdS|Args]) -> _ -> ok catch _:Reason -> + io:format("Reason:~p, get_stacktrace:~p~n", + [Reason, erlang:get_stacktrace()]), {error, Reason} end; [] ->