Мне нужна небольшая помощь по сценарию / команде / cronjob ..
Мне нужно перенаправить вывод команды tcpdump в файл журнала и хранить 1 файл журнала на каждый день. Я знаю, что могу использовать синтаксис ведения журнала tcpdump, но я также использую awk -F
для фильтрации вывода. Моя команда выглядит так и запускается сама по себе прекрасно.
tcpdump -ieth0 -p "tcp[tcpflags] & (tcp-syn) !=0" | awk -F 'Flags' '{print $1}' > /var/log/tcpdump.log
Как я могу заставить его ротацию файла на каждый день? Есть ли способ сделать с помощью сценария оболочки (мои знания сценариев оболочки очень ограничены).
Если вы не умеете писать сценарии оболочки, я бы не стал писать собственную ротацию журналов. Не похоже, что у вас здесь есть необходимость, которую нельзя было бы решить лучше, используя logrotate вместо того, чтобы кататься самостоятельно. Вы можете сделать простой файл конфигурации
# /etc/logrotate.d/tcpdump
"/var/log/tcpdump.log" {
daily
rotate 30
compress
prerotate
killall your_dump_script
endscript
postrotate
your_dump_script &
endscript
}
Это будет:
daily
30
копирует, так как вы не хотите заполнять свой дискcompress
используя gzip для экономии места на диске. Ты можешь использовать zless
или zgrep
чтобы просмотреть их.your_dump_script
перед вращением и перезапустить после. Не стесняйтесь переименовать это в что-нибудь по своему вкусу.Если вы положите это /etc/logrotate.d
это должно быть подхвачено вашими встроенными заданиями cron, но если вы хотите запустить его вручную, чтобы убедиться, что он работает:
logrotate /etc/logrotate.d/tcpdump
Или поместите конфигурацию в другое место и запустите ее из своего скрипта. В любом случае вы пишете меньше кода, и все с большей вероятностью будет работать надежно.
Вы можете использовать rotatelogs
(документы здесь): все, что вам нужно сделать, это пропустить через него вывод, предоставить несколько опций, а он позаботится обо всем остальном. Например:
tcpdump ... | rotatelogs /var/log/tcpdump.log
автоматически поворачивает выходной файл при соблюдении указанных вами критериев (размер файла, временной интервал).
Я написал залогинщик эти выходные. Я бы, наверное, не стал, если бы читал @ JdeBP отличный ответ о multilog
.
Я сосредоточился на том, чтобы он был легким и имел возможность bzip2 его выходные фрагменты, такие как:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
Тем не менее, еще многое предстоит сделать и протестировать.