Escrevendo um script Bash para rodar e terminar em horários específicos

0

Gostaria de criar um script que faça o seguinte. Comece em um determinado momento durante o dia e termine em outro horário determinado.

Por exemplo, tenho um programa que gostaria de testar, por isso o meu script será definido para começar às 22:00 e continuar até às 9:00.

Isso segue da minha outra pergunta sobre a execução de programas novamente e novamente.

Eu tenho o seguinte:

#!/bin/bash

trap "echo manual abort; exit 1"  1 2 3 15;
RUNS=0;
while open  -W /Path/to/Program.app
do
    RUNS=$((RUNS+1));
    echo $RUNS > /temp/autotest_run_count.txt;
done

exit 0

Esse script basicamente executa meu programa (no Mac OSX) e detecta qualquer falha, caso contrário, ele executará novamente o programa quando for fechado.

Gostaria de poder executar isso como mencionei acima. Começa às 22:00. Termine às 9:00 da manhã.

Seu conselho é sempre útil.

Obrigado!

Euden

    
por Ben Crazed Up Euden 29.07.2014 / 10:25

2 respostas

1

Eu estendi seu script, para que você possa executá-lo uma vez na inicialização e ele funcionará entre as 9h e as 9h.

#!/bin/bash -·
LOGFILE="/tmp/autotest_run_count.txt"

trap "echo manual abort; exit 1"  1 2 3 15
RUNS=0
while [ 1 ] ; do·
    HOUR="$(date +'%H')"
    if [ $HOUR -ge 21 -a $HOUR -lt 9 ] ; then
        # run program
        libreoffice || exit 1
        RUNS=$((RUNS+9))
        echo $RUNS > $LOGFILE
    else
        echo $RUNS, waiting H=$HOUR > $LOGFILE
        # note: calculating the time till next wakeup would be more 
        # efficient, but would not work when the time changes abruptly
        # e.g. a laptop is suspended and resumed
        # so, waiting a minute is reasonably efficient and robust
        sleep 60
    fi
done
    
por 29.07.2014 / 14:30
1

Eu uso este script. Ele inicia outro script em um determinado momento e o interrompe em outro momento determinado. Entre periodicamente verifica se o script ainda está em execução e, se não, o reinicia. Você só precisa alterar a hora de início, o tempo de parada, o scriptname e o shell que está usando de acordo com suas necessidades e comentar as linhas relevantes "while" (data + hora ou apenas a hora).

    #!/bin/bash

    if [ "$1" = "go" ]; then

        starttime1=0900 #e.g. 201712312355 for date+time or 1530 for time
        stoptime1=1100
        scriptname1="./myscript"

        # wait for starttime
        echo "Waiting for " "$starttime1" " to start " "$scriptname1";
        #while [ $(($(date +"%Y%m%d%H%M") < $starttime1)) = 1 ]; do #day and time
        while [ $((10#$(date +"%H%M") != 10#$starttime1)) = 1 ]; do #just time. 10# forces following number to be interpreted as base 10. Otherwise numbers with leading zero will be interpreted as octal and this causes errors.
            sleep 10;
        done;

        # run target script
        lxterminal -e "$scriptname1";

        # check if the target script is running, until the stoptime is reached and restart it if necessary
        echo "Waiting for " "$stoptime1" " to stop " "$scriptname1";
        #while [ $(($(date +"%Y%m%d%H%M")<$stoptime1)) = 1 ]; do #day and time
        while [ $((10#$(date +"%H%M") != 10#$stoptime1)) = 1 ]; do #just time. 10# forces following number to be interpreted as base 10. Otherwise numbers with leading zero will be interpreted as octal and this causes errors.
            sleep 10;
            if [ -z $(pidof -x "$scriptname1") ]; then
                echo "script was stopped.";
                lxterminal -e "$scriptname1";
            fi;
        done;

        # end the target script when the stoptime is reached
        kill $(pidof -x "$scriptname1");
        echo "ok.";

    else
        lxterminal -e "$0" go;
        exit;
    fi
    
por 21.11.2017 / 04:10