2010-10-18 4 views

ответ

42

Вы сразу же выполнение сценария и отправки его выход в at. Вам необходимо отправить имя самого сценария в at:

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

И будет ли помогать downvoter объяснить? –

22

как насчет:

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

Да, это Цюй Эстине действительно не нужно 'at'. Я предлагаю вам использовать '&&' вместо ';', поэтому его можно отменить. –

+0

Хорошее усиление Jack –

+0

at более изящный imo, так как он не виснет процесс. – Eddie

1

команды вычисляются слева направо, поэтому первым ваш скрипт запускается на выполнение, то выход из него будет поступать в по команде, это нормальное поведение , Посмотрите на at man pages для получения дополнительной информации.

1

Проблема заключается в том, что вы запускаете скрипт и подаете вывод на команду at. Что вам нужно сделать, это запустить команду at с указанием пути к вашему скрипту в качестве параметра. Я не уверен в синтаксисе, но at -h или man at должен помочь.

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

Это должно работать до планирования сценария для запуска в определенное время. Для получения дополнительной информации о команде «at» попробуйте linuxmanpages.com. Я могу ошибаться (в настоящее время не тестировать систему Linux).

удачи в любом случае

0

попробовать этот

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

основной функцией

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 
} 

функция обратного отсчета

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 "  " 
}