21 lines
616 B
Erlang
21 lines
616 B
Erlang
-module(watcher).
|
|
-compile(export_all).
|
|
|
|
start(MonitorPid, File) ->
|
|
spawn_link(?MODULE, init, [MonitorPid, File]).
|
|
|
|
init(MonitorPid, File) ->
|
|
Cmd = "/usr/bin/tail -n0 --follow=name " ++ File,
|
|
Port = open_port({spawn, Cmd}, [stderr_to_stdout, exit_status, binary]),
|
|
loop(MonitorPid, Port).
|
|
|
|
loop(MonitorPid, Port) ->
|
|
receive
|
|
{Port, {data, {eol, Bin}}} ->
|
|
Text = binary_to_list(iolist_to_binary(Bin)),
|
|
MonitorPid ! {log_line, Text},
|
|
loop(MonitorPid, Port);
|
|
{Port, {exit_status, _Status}} ->
|
|
io:format("Watcher terminated~n")
|
|
end.
|