Это происходит потому что >
перенаправление происходит перед head
программа запущена. >
перенаправление усекает файл, если это существует, поэтому когда head
читает файл, это уже пусто.
Вот пример вывода файла журнала:
Feb 26 23:04:55 pegasus internal-sftp[32524]: session opened for local user joeuser from [123.123.123.123]
Feb 26 23:04:57 pegasus internal-sftp[32524]: opendir "/home/joeuser"
Feb 26 23:04:58 pegasus internal-sftp[32524]: closedir "/home/joeuser"
Feb 26 23:05:01 pegasus internal-sftp[32524]: opendir "/home/joeuser/"
Feb 26 23:05:01 pegasus internal-sftp[32524]: closedir "/home/joeuser/"
Feb 26 23:05:02 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:02 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: opendir "/home/joeuser/upload"
Feb 26 23:05:07 pegasus internal-sftp[32524]: closedir "/home/joeuser/upload"
Feb 26 23:05:09 pegasus internal-sftp[32524]: session closed for local user joeuser from [123.123.123.123]
Если вы обратили внимание на вывод выше, там будет номер в квадратных скобках internal-sftp [32524]
. Номер - 32524. Он представляет собой идентификатор сеанса для пользователя joeuser, поэтому вы можете использовать эту строку вместе с сообщениями, относящимися к логину какого пользователя.
Вы можете изменить расписание ротации журналов для различных журналов в /etc/logrotate.d / *
. Каждый файл журнала обычно имеет соответствующий файл в этом каталоге. Таким образом, вы можете изменить там файл syslog
, например, или создать свой собственный файл журнала sftp.log
.
Также logrotate
имеет файл конфигурации, /etc/logrotate.conf
, который содержит следующие строки:
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
Это то, что файлы в / etc / logrotate .d
, если у них нет собственных настроек. Таким образом, большинство файлов меняются еженедельно, а 4 из них хранятся. Если вы хотите сохранить 6 месяцев, это будет 4 * 6 = 24 для варианта ротации
, чтобы сохранить примерно 6 месяцев.
Если вы входите в /var/log/sftp.log
через syslog
, вам необходимо внести изменения в этот файл, /etc/logrotate.d/syslog
.После внесения необходимых изменений ваш файл будет выглядеть следующим образом:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/sftp.log
{
rotate 24
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Поскольку вы используете syslog
, вам также придется чередовать все эти файлы журналов, сохраните их на 24 недели. Если это неприемлемо, то ваш единственный другой способ действий - создать отдельный раздел в этом файле, syslog
, например так:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
/var/log/sftp.log
{
rotate 24
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Это имеет некоторые побочные эффекты, один из которых заключается в том, что вы будете перезапускать демон syslog
2 раза в неделю вместо одного раза. Но синтаксис logroate не позволяет точно управлять расписанием ротации для одних файлов журналов, не меняя ротацию других, когда файлы журналов создаются одной и той же службой, то есть syslog
.