fix micro service

This commit is contained in:
anlicheng 2025-04-30 18:38:45 +08:00
parent 380c7949b8
commit 333d51613e

View File

@ -349,38 +349,14 @@ kill_os_pid(OSPid) when is_integer(OSPid) ->
%%
-spec kill_service(WorkDir0 :: binary(), ExecCmd0 :: binary() | [binary()], OSPid :: integer()) -> no_return().
kill_service(WorkDir0, ExecCmd0, OSPid) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
WorkDir = binary_to_list(WorkDir0),
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),
kill_service(WorkDir0, ExecCmd0, OSPid) when is_binary(WorkDir0) ->
{RealExecCmd, PortSettings} = make_cmd(WorkDir0, ExecCmd0),
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
receive
{Port, {exit_status, Code}} ->
lager:debug("[service] exit with code: ~p", [Code])
after 5000 ->
erlang:port_close(Port),
kill_os_pid(OSPid)
end,
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()}.
boot_service(WorkDir0, ExecCmd0) when is_binary(WorkDir0), is_binary(ExecCmd0) ->
WorkDir = binary_to_list(WorkDir0),
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),
{RealExecCmd, PortSettings} = make_cmd(WorkDir0, ExecCmd0),
Port = erlang:open_port({spawn_executable, RealExecCmd}, PortSettings),
{ok, Port}.
@ -418,4 +375,25 @@ is_url(Input) when is_binary(Input) ->
true
catch
_:_ -> 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}.