Перенаправить STDERR и STDOUT в файл с отметкой времени в каждой строке

На моем CentOS я пытаюсь выполнить сценарий php, который содержит бесконечный цикл, чтобы сделать некоторые интересные вещи внутри. Неважно, что бесконечный цикл не может быть точным решением для большинства случаев, но это для моего теста. Если в этом цикле происходит ошибка, она записывается в выходной файл (как и все из stdout). Это то, что я делаю в данный момент.

exec php testfile.php >> output.log 2>&1

Это работает, как и ожидалось, но я хочу знать, когда stdout или stderr что-то записывает в файл, поэтому мне нужна какая-то временная метка в каждой строке.

Я уже пробовал что-то подобное, но если я сделаю это, как указано выше, просто не будет никакого вывода (подозреваю, что это не простой сценарий оболочки).

Можно ли перенаправить каждый echo из testfile.php и каждая ошибка из stderr в output.log с отметкой времени в каждой строке?

1 ответ

Вы можете поставить перед каждой строкой отформатированную строку даты и времени, используя gnu awk. Однако буферизация может привести к переупорядочению некоторых строк или исчезновению последней пары. Чтобы избежать этого, рекомендуется использовать stdbuf.

stdbuf -i0 -o0 php testfile.php  2>&1 | gawk '{print strftime("%Y%m%d-%H%M%S"), $0}' >> output.log 
Другие вопросы по тегам