Смотреть (вращающийся) экран входа
У меня работает почтовый сервер, к которому я подключаюсь по 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 должен повторить попытку открытия файла, когда ротация журнала была выполнена