Обратите внимание, что если вы повторяете эту команду в цикле, вы пропустите пакеты, которые передаются между моментом закрытия одного tshark и следующего tshark запускается и готов к захвату пакетов.
Возможно, лучше было бы использовать dumpcap
один раз и указывать ему создавать новый файл каждую минуту. А затем при необходимости получите статистику из этих дампов. С файлами необработанного дампа вы сможете получить из них всю возможную информацию.
Примерно так:
dumpcap -b duration:60 -w dump.pcap
При этом будут созданы файлы с именем dump_00002_20170224130408.pcap
.
А затем получите статистику, если необходимо:
tshark -z io,stat,1,tcp.port==80,tcp.port==443 -r dump_00002_20170224130408.pcap
Чтобы проверить, присутствует ли файл в каком-либо месте, вы можете использовать -f в операторе if.
if [ $FILE -f ]; then
(Как сказал the_velour_fog, выражение вернет True, даже если файл пуст)
From man bash | less '+ / ^ \ s * CONDITIONAL'
-s file
Истинно, если файл существует и имеет размер больше нуля.
Чтобы скрипт запускался в заранее определенное время, поместите свой код в исполняемый скрипт и загрузите его в cronjob.
Я подозреваю, что вы могли бы поместить свою команду в один лайнер и загрузить ее в кробтаб? (Мне было бы интересно узнать, успешно ли это сделал кто-то другой)
Но проблема с командами cron в том, что
lsof
или что-то в этом роде} - чтобы вы не получали никаких отладочных данных / отзывов о том, что пошло не так, когда вы создаете свою команду cron по этим причинам я бы рекомендовал просто поместить ваши команды в исполняемый скрипт, чтобы вы могли писать свой код в среде, удобной для программиста, то есть в терминале, а затем, когда вы будете удовлетворены его поведением, загрузите команду, чтобы вызвать его в crontab
, скажем, это ваш сценарий /tmp/checksize.sh
#!/bin/bash
if [[ -s /tmp/xx_x__x.log ]]
then
printf "\n\n%s\n\n\n" true > /tmp/sizelog.log
else
printf "\n\n%s\n\n\n" false > /tmp/sizelog.log
fi
, просто запустите crontab -e
и добавьте команду
5 0 * * * /tmp/checksize.sh
, что означает: # запускать через пять минут после полуночи, каждый день
от man 5 crontab
Commands are executed by cron(8) when the minute, hour, and month of
year fields match the current time, and when at least one of the two
day fields (day of month, or day of week) match the current time (see
``Note'' below). cron(8) examines cron entries once every minute. The
time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
[...]
EXAMPLE CRON FILE
The following lists an example of a user crontab file.
# use /bin/bash to run commands, instead of the default /bin/sh
SHELL=/bin/bash
# mail any output to `paul', no matter whose crontab this is
MAILTO=paul
#
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"
# Run on every second Saturday of the month
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"