2010-10-18 28 views

Respuesta

42

se está ejecutando el script de forma inmediata y enviando su salida al at. Es necesario enviar el nombre de la propia secuencia de comandos en at:

echo /path/to/my/script | at now + 5 min 
+5

Y sería el cuidado downvoter de explicar? –

22

¿qué tal:

sleep 300 && /path/to/my/script 
+6

Sí, esto qu realmente no necesitaba 'at'. Te sugiero que uses '&&' en lugar de ';', por lo que se puede cancelar. –

+0

mejora agradable Jack –

+0

en es el más elegante de la OMI, ya que no se cuelga un proceso. – Eddie

1

comandos se evalúan de izquierda a derecha, por lo que primero el script se ejecuta, la salida de ella se canaliza al comando at, este es un comportamiento normal . Consulte el at man pages para obtener más información.

1

El problema es que se está ejecutando la secuencia de comandos y la tubería de la salida al comando at. Lo que necesita hacer es ejecutar el comando at con la ruta a su script como parámetro. No estoy seguro de la sintaxis, pero at -h o man at deberían ayudar.

6
at -f /path/to/my/script -t now +5 minutes 

Esto debería funcionar tanto como programar una secuencia de comandos para ejecutar en un momento específico. Para obtener más información sobre el comando "at", intente linuxmanpages.com. Puedo pensar mal (actualmente no en un sistema Linux para probar).

Buena suerte de todos modos

0

prueba este

sys.scheduled_run /path/to/my/script 5

función principal

function sys.scheduled_run(){ 
    local PATH_TO_ACTION MINS SLEEPTIME 
    PATH_TO_ACTION=$1 
    MINS=$2 
    SLEEPTIME=$(($MINS * 60)) 
    echo "Sleeping for $MINS minute ($SLEEPTIME seconds) and then running $PATH_TO_ACTION" 
    ui.countdown $SLEEPTIME 
    $PATH_TO_ACTION 
    echo "Done" 
    if [ "REPEAT" == "$3" ] 
    then 
     echo "Going for Repeat" 
     sys.scheduled_run "[email protected]" 
    fi 
} 

función de cuenta atrás

function ui.countdown(){ #USAGE ui.countdown 60 countdown for 60 seconds 
     local SECONDS=$1 
     local START=$(date +%s) 
     local END=$((START + SECONDS)) 
     local CUR=$START 
     while [[ $CUR -lt $END ]] 
     do 
       CUR=$(date +%s) 
       LEFT=$((END-CUR)) 

       printf "\r%02d:%02d:%02d" \ 
         $((LEFT/3600)) $(((LEFT/60)%60)) $((LEFT%60)) 

       sleep 1 
     done 
     echo "  " 
} 
Cuestiones relacionadas