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

1243
Dolgsthrasir

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

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

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

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

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

1

1 ответ на вопрос

2
Gombai Sándor

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

stdbuf -i0 -o0 php testfile.php 2>&1 | gawk '' >> output.log 
Это действительно работает, если testfile.php содержит только что-то вроде `echo" Test ";`. Но ничего не записывается в выходной файл, если это `echo` находится в указанном бесконечном цикле. Может ли быть так, что из-за этого цикла и выполнения никогда не заканчивается, ничего не записывается? Dolgsthrasir 8 лет назад 0
Нет выхода, может быть. Я проверил это сейчас с бесконечным эхом, и выглядит хорошо. Gombai Sándor 8 лет назад 0