Я обнаружил, что то же самое произошло за пределами Эрланга. Проблема в том, что tail пытается показать вам end файла, а не весь файл. Если вы используете его в обычном файле, все, что написано, будет новым и подхвачено -f , но в этом случае похоже, что tail ждет конца файла (eof, который идет через канал) и затем показывает последние 10 строк (рассматривая двоичный файл как текст).
tail -F -c 9999999
(при условии, что размер вашего журнала составляет 9999999 байт или меньше), вероятно, сработает.
Возможно, попробуйте использовать cat вместо tail -F , что, похоже, мне помогло. Тогда вам просто нужно избежать того факта, что cat выходит на eof, чего, я полагаю, вы пытались избежать, используя tail.
Итак, скрипт оболочки, который зацикливается cat бесконечно, может быть?
Или заставьте erlang перезапуститься близко и воссоздать порт, когда он умрет, так как вы все равно получаете сигнал eof. Или используйте флаг exit_status, чтобы open_port сигнализировал о выходе из процесса, если вам необходимо различить eof и выход из процесса. (Если вы используете и exit_status, и eof, eof никогда не приходит, краткий тест с cat </ dev / null </em> указывает)