O arquivo de verificação está presente e não está vazio

2

Eu quero verificar o arquivo xx_x__x.log está presente no local ou o tamanho do arquivo é 0 a cada domingo 2:30 da manhã. Eu tenho um script para verificar o tamanho do arquivo e verificar se ele existe, mas não sei como verificar em um determinado momento.

    
por Gomsthyshankar Selvakumar 28.11.2016 / 06:25

2 respostas

2

Para verificar se um arquivo está presente em um local, você pode usar o -f em uma instrução if.

if [ $FILE -f ]; then

(Como o the_velour_fog disse, a expressão retornará True mesmo que o arquivo esteja vazio)

    
por 28.11.2016 / 07:15
15

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

-s file
True if file exists and has a size greater than zero.

Para fazer com que o script seja executado em um horário pré-definido, coloque seu código em um scipt executável e carregue-o em um cronjob.

Eu suspeito que você poderia colocar seu comando em um forro e carregá-lo em um crobtab? (Eu estaria interessado em saber se alguém fez isso com sucesso)
Mas o problema com os comandos do cron é que

  1. eles não estão conectados a um terminal - que eu conheço {embora você provavelmente possa verificar com lsof ou algo assim} - para que você não obtenha nenhuma saída / feedback de depuração sobre o que deu errado ao construir seu cron comando
  2. Você precisa aguardar algum tempo antes de poder testar seu comando do cron

por essas razões, eu recomendaria apenas colocar seus comandos em um script executável, para que você possa escrever seu código em um ambiente amigável ao codificador - ou seja, um terminal, e quando você estiver satisfeito com o comportamento correto, carregue um comando para chamar em um crontab

então diga que este é seu script /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

apenas execute crontab -e e adicione o comando

5 0 * * * /tmp/checksize.sh

que significa: # executar cinco minutos depois da meia-noite, todos os dias

sobre acertar o timing

de 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"
    
por 28.11.2016 / 07:19