2010-10-18 11 views
15

मैं सिर्फ एक बैश स्क्रिप्ट को कॉल करने के 5 मिनट बाद चलाने के लिए चाहता हूं। मैं क्या गलत कर रहा हूं?बैश स्क्रिप्ट 5 मिनट में चलाने के लिए

मैं आदेश है:

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

और फिर भी स्क्रिप्ट अभी हर बार चलाता है।

उत्तर

42

आप तुरंत स्क्रिप्ट निष्पादित और at में इसके उत्पादन भेज रहे हैं। आप at में स्क्रिप्ट खुद के नाम भेजने की जरूरत है:

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

और downvoter देखभाल समझाने के लिए होगा कोई मतलब नहीं है? –

22

तरीके के बारे में:

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

हाँ, इस qu कोशिश एस्टियन को वास्तव में 'एटी' की आवश्यकता नहीं थी। मेरा सुझाव है कि आप ';' के बजाय '&&' का उपयोग करें, इसलिए इसे रद्द किया जा सकता है। –

+0

अच्छा वृद्धि जैक –

+0

पर अधिक आकर्षक आईएमओ है क्योंकि यह एक प्रक्रिया को लटका नहीं देता है। – 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 पर आज़माएं। मैं गलत विचार हो सकता हूं (वर्तमान में परीक्षण करने के लिए लिनक्स सिस्टम पर नहीं)।

गुड लक वैसे भी

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