Смотреть (вращающийся) экран входа

У меня работает почтовый сервер, к которому я подключаюсь по SSH. мой .bash_profile настроен для привязки сеанса SSH к определенному screen сессия.

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

tail -f /var/log/syslog

но выходной останавливается каждый день в 6:25. Я думаю, что это время, когда журнал вращается. Так есть ли способ распечатать журнал на экране?

2 ответа

Тебе нужно tail --follow=name /var/log/syslog

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

Режим имени --follow марки tail использовать более дорогой stat(2) syscall, который фактически "разрешает" имя файла каждый раз через уровень файловой системы, и если tail замечает, что файл изменил свой так называемый "индекс", tail повторно открывает файл.

Выход из man tail:

-f, --follow[={name|descriptor}]

выводить добавленные данные по мере роста файла; аргумент отсутствия опции означает "дескриптор"

Вы также можете посмотреть на -F опция командной строки, которая определяется как

-F такой же как --follow=name --retry

Ваше предположение на самом деле верно. В это время запись прерывания системного журнала записывается в журнал, составляется из него и повторно запускается журнал.

Вы можете попробовать с

tail -f --retry /var/log/syslog

Таким образом, tail должен повторить попытку открытия файла, когда ротация журнала была выполнена

Другие вопросы по тегам