2010-10-18 179 views
15

我只想讓bash腳本在調用5分鐘後運行。我究竟做錯了什麼?bash腳本運行5分鐘

我有命令:

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

然而在腳本運行的時候了每一次。

回答

42

您立即執行該腳本,將其輸出發送到at。您需要將腳本本身的名稱發送到at

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

而且downvoter會照顧解釋嗎? – 2010-10-19 04:23:44

22

怎麼樣:

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

呀,這曲estion並不真正需要'at'。我建議你使用'&&'而不是';',這樣它可以被取消。 – 2010-10-18 23:40:11

+0

不錯的增強傑克 – 2010-10-18 23:45:39

+0

在更優雅的伊莫,因爲它不掛一個進程。 – Eddie 2012-02-27 19:57:21

1

命令是從左向右計算,所以首先你的腳本執行後,它的輸出將通過管道輸送到at命令,這是正常行爲。請看at man pages瞭解更多信息。

1

問題是,您正在運行腳本並將輸出管道輸送至at命令。你需要做的是運行at命令,將腳本路徑作爲參數。我不確定語法,但at -hman 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 "  " 
}