fix micro service
This commit is contained in:
parent
380c7949b8
commit
333d51613e
@ -349,38 +349,14 @@ kill_os_pid(OSPid) when is_integer(OSPid) ->
|
|||||||
|
|
||||||
%% 执行命令
|
%% 执行命令
|
||||||
-spec kill_service(WorkDir0 :: binary(), ExecCmd0 :: binary() | [binary()], OSPid :: integer()) -> no_return().
|
-spec kill_service(WorkDir0 :: binary(), ExecCmd0 :: binary() | [binary()], OSPid :: integer()) -> no_return().
|
||||||
kill_service(WorkDir0, ExecCmd0, OSPid) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
|
kill_service(WorkDir0, ExecCmd0, OSPid) when is_binary(WorkDir0) ->
|
||||||
WorkDir = binary_to_list(WorkDir0),
|
{RealExecCmd, PortSettings} = make_cmd(WorkDir0, ExecCmd0),
|
||||||
PortSettings = [
|
|
||||||
{cd, WorkDir},
|
|
||||||
exit_status
|
|
||||||
],
|
|
||||||
|
|
||||||
ExecCmd = binary_to_list(ExecCmd0),
|
|
||||||
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
|
||||||
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
|
||||||
receive
|
|
||||||
{Port, {exit_status, Code}} ->
|
|
||||||
lager:debug("[service] exit with code: ~p", [Code])
|
|
||||||
after 5000 ->
|
|
||||||
kill_os_pid(OSPid)
|
|
||||||
end,
|
|
||||||
is_port(Port) andalso erlang:port_close(Port);
|
|
||||||
kill_service(WorkDir0, [ExecCmd0|Args], OSPid) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
|
|
||||||
WorkDir = binary_to_list(WorkDir0),
|
|
||||||
PortSettings = [
|
|
||||||
{cd, WorkDir},
|
|
||||||
{args, [binary_to_list(A) || A <- Args]},
|
|
||||||
exit_status
|
|
||||||
],
|
|
||||||
ExecCmd = binary_to_list(ExecCmd0),
|
|
||||||
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
|
||||||
|
|
||||||
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
||||||
receive
|
receive
|
||||||
{Port, {exit_status, Code}} ->
|
{Port, {exit_status, Code}} ->
|
||||||
lager:debug("[service] exit with code: ~p", [Code])
|
lager:debug("[service] exit with code: ~p", [Code])
|
||||||
after 5000 ->
|
after 5000 ->
|
||||||
|
erlang:port_close(Port),
|
||||||
kill_os_pid(OSPid)
|
kill_os_pid(OSPid)
|
||||||
end,
|
end,
|
||||||
is_port(Port) andalso erlang:port_close(Port).
|
is_port(Port) andalso erlang:port_close(Port).
|
||||||
@ -388,26 +364,7 @@ kill_service(WorkDir0, [ExecCmd0|Args], OSPid) when is_binary(WorkDir0), is_bina
|
|||||||
%% 启动微服务
|
%% 启动微服务
|
||||||
-spec boot_service(WorkDir :: binary(), ExecCmd :: binary() | [binary()]) -> {ok, Port :: port()} | {error, Reason :: binary()}.
|
-spec boot_service(WorkDir :: binary(), ExecCmd :: binary() | [binary()]) -> {ok, Port :: port()} | {error, Reason :: binary()}.
|
||||||
boot_service(WorkDir0, ExecCmd0) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
|
boot_service(WorkDir0, ExecCmd0) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
|
||||||
WorkDir = binary_to_list(WorkDir0),
|
{RealExecCmd, PortSettings} = make_cmd(WorkDir0, ExecCmd0),
|
||||||
PortSettings = [
|
|
||||||
{cd, WorkDir},
|
|
||||||
exit_status
|
|
||||||
],
|
|
||||||
|
|
||||||
ExecCmd = binary_to_list(ExecCmd0),
|
|
||||||
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
|
||||||
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
|
||||||
{ok, Port};
|
|
||||||
boot_service(WorkDir0, [ExecCmd0|Args]) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
|
|
||||||
WorkDir = binary_to_list(WorkDir0),
|
|
||||||
PortSettings = [
|
|
||||||
{cd, WorkDir},
|
|
||||||
{args, [binary_to_list(A) || A <- Args]},
|
|
||||||
exit_status
|
|
||||||
],
|
|
||||||
ExecCmd = binary_to_list(ExecCmd0),
|
|
||||||
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
|
||||||
|
|
||||||
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
|
||||||
{ok, Port}.
|
{ok, Port}.
|
||||||
|
|
||||||
@ -418,4 +375,25 @@ is_url(Input) when is_binary(Input) ->
|
|||||||
true
|
true
|
||||||
catch
|
catch
|
||||||
_:_ -> false
|
_:_ -> false
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec make_cmd(WorkDir0 :: binary(), Cmd0 :: binary() | [binary()]) -> {RealCmd :: string(), PortSettings :: list()}.
|
||||||
|
make_cmd(WorkDir0, Cmd0) when is_binary(Cmd0) ->
|
||||||
|
WorkDir = binary_to_list(WorkDir0),
|
||||||
|
PortSettings = [
|
||||||
|
{cd, WorkDir},
|
||||||
|
exit_status
|
||||||
|
],
|
||||||
|
ExecCmd = binary_to_list(Cmd0),
|
||||||
|
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
||||||
|
{RealExecCmd, PortSettings};
|
||||||
|
make_cmd(WorkDir0, [Cmd0|Args]) when is_binary(Cmd0) ->
|
||||||
|
WorkDir = binary_to_list(WorkDir0),
|
||||||
|
PortSettings = [
|
||||||
|
{cd, WorkDir},
|
||||||
|
{args, [binary_to_list(A) || A <- Args]},
|
||||||
|
exit_status
|
||||||
|
],
|
||||||
|
ExecCmd = binary_to_list(Cmd0),
|
||||||
|
RealExecCmd = filename:absname_join(WorkDir, ExecCmd),
|
||||||
|
{RealExecCmd, PortSettings}.
|
||||||
Loading…
x
Reference in New Issue
Block a user