Comando Sleep para executar exatamente a cada uma hora

0

Eu preciso da sua pequena ajuda, eu tenho um script que eu não posso agendar no crontab. Mas estou usando o comando sleep.

Estou enfrentando problema ao usar o comando sleep.

Meu script demorou 10 ou 15 min para ser concluído (tempo de execução) e eu uso sleep (3600), o que significa que ele dorme por mais uma hora

Mas minha exigência é que meu roteiro comece às 9:00, 10:00 ... e assim por diante. Devido ao meu tempo de execução de script que estou tomando agora 10 min (varia), e após o comando sleep (3600), meu script em execução começa às 10:10 em vez de 10:00

Alguém pode me ajudar como posso corrigir isso para que o script seja executado exatamente a cada hora.

    
por Pallvi Mahajan Sapen 14.02.2017 / 07:22

2 respostas

2

#!/bin/bash

function MY_CODE(){
    START_TIME_SECONDS=$(date +%s)
    <your code>
    END_TIME_SECONDS=$(date +%s)
    SCRIPT_RUN_TIME_IN_SECONDS=$((${END_TIME_SECONDS}-${START_TIME_SECONDS}))
    SLEEP_TIME=$((3600-${SCRIPT_RUN_TIME_IN_SECONDS}))
    sleep ${SLEEP_TIME}
}

MY_CODE()
    
por 14.02.2017 / 07:57
0

Como seu objetivo é agendar a execução com base na hora de início, você pode agendar cada execução de script assim:

#!bin/bash

function runattime {
    execution_time=$1
    delay=$(( $(date -d "$1" "+%s") - $(date "+%s") ))
    if [ $delay -le 0 ]; then
        echo "negative delay, probably due to incorrect date argument"
    else
        sleep $delay && ${@:2}
    fi
}


# One shot run
runattime 11:50 echo blah & 
runattime 11:51 echo bleh & 


# Everyday run
while true; do
    runattime 11:50 echo hola & 
    runattime 11:51 echo hello & 
    sleep 86400  # wait for next day and loop
done

Para que o script seja executado em segundo plano, mesmo quando você está desconectado, você pode usar o comando nohup do bash.

    
por 14.02.2017 / 11:34

Tags