Проверить наличие файла, но он не пустой

Обратите внимание, что если вы повторяете эту команду в цикле, вы пропустите пакеты, которые передаются между моментом закрытия одного 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
2
10.12.2017, 17:45
2 ответа

Чтобы проверить, присутствует ли файл в каком-либо месте, вы можете использовать -f в операторе if.

if [ $FILE -f ]; then

(Как сказал the_velour_fog, выражение вернет True, даже если файл пуст)

2
27.01.2020, 21:49

From man bash | less '+ / ^ \ s * CONDITIONAL'

-s file
Истинно, если файл существует и имеет размер больше нуля.

Чтобы скрипт запускался в заранее определенное время, поместите свой код в исполняемый скрипт и загрузите его в cronjob.

Я подозреваю, что вы могли бы поместить свою команду в один лайнер и загрузить ее в кробтаб? (Мне было бы интересно узнать, успешно ли это сделал кто-то другой)
Но проблема с командами cron в том, что

  1. они не подключены к терминалу, о чем я знаю {хотя вы могли бы возможно, проверьте с помощью lsof или что-то в этом роде} - чтобы вы не получали никаких отладочных данных / отзывов о том, что пошло не так, когда вы создаете свою команду cron
  2. Вам нужно подождать некоторое время, прежде чем вы сможете протестировать ваша команда 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"
14
27.01.2020, 21:49

Теги

Похожие вопросы