लिनक्स में हमें "at" कमांड की आवश्यकता क्यों है?


38

मैं कोड का अध्ययन कर रहा था जिसमें atकमांड का उपयोग किया जाता है। मैंने चारों ओर देखा और पाया कि इसका उपयोग बैच की नौकरियों को निष्पादित करने के लिए किया जाता है। इसका उपयोग नौकरियों को शेड्यूल करने के लिए किया जाता है। यह उसके इनपुट, एक कमांड और एक समय, रिश्तेदार या निरपेक्ष के रूप में दिया जाता है।

तो, मेरा पहला सवाल यह है: atकमांड का उपयोग क्यों किया जाता है? किन परिस्थितियों में उपयोग करने की आवश्यकता है at? जब सॉफ्टवेयर को अनइंस्टॉल करने की कोशिश में कुछ बैश स्क्रिप्ट कोड और कुछ पृष्ठभूमि सेवाओं को फिर से शुरू किया जाना था, तो मैंने इसका सामना किया।

मेरा दूसरा प्रश्न: किसी कमांड को बैच जॉब के रूप में निष्पादित करने और कमांड को सीधे कमांड (या सबस्क्रिप्शन में) निष्पादित करने में क्या अंतर है?

जवाबों:


47

बर्नहार्ड का उत्तर सही है: बहु-उपयोगकर्ता प्रणालियों में, रात के कुछ अधर्मी घंटों में भारी कार्यक्रमों को निष्पादित करने की क्षमता विशेष रूप से सुविधाजनक है, दोनों व्यक्ति नौकरी प्रस्तुत करने के लिए, और उसके सहकर्मियों के लिए। यह "अच्छा खेल" का हिस्सा है।

मैंने अपना अधिकांश पीएच.डी. इस तरह से गणना करना, स्क्रिप्ट को अच्छी कमांड के साथ जोड़ना जो मेरे काम की प्राथमिकता को डिमोट करती है जब भी अन्य लोग मशीन को व्यस्त रखते थे, जबकि रात में सभी सिस्टम संसाधनों को हॉग करने की अपनी क्षमता को बरकरार रखते हुए।

मैंने यह देखने के लिए कि क्या मेरा प्रोग्राम चल रहा था, और यदि आवश्यक हो, तो इसे पुनः आरंभ करने के लिए मैंने उसी कमांड का उपयोग किया।

इसके अलावा, आप ध्यान में रखना चाहिए कि कम से पहले जिस तरह से लिखा गया था स्क्रीन, tmux , और इतने पर है, यह यानी एक अलग खोल करने के लिए एक आसान तरीका, एक है कि एक बार आप प्रणाली लॉग ऑफ नहीं मरेगा था ताकि।

अंत में, आपको यह भी ध्यान देना चाहिए कि यह क्रोन से अलग है, जो लंबे समय से आसपास भी है। तथ्य यह है कि पर, सामयिक है, जबकि क्रॉन, इसलिए बार-बार किया जा रहा है, प्रणाली नौकरियों जो वास्तव में तय अंतराल पर हमेशा के लिए क्रियान्वित किया जा करने की आवश्यकता है के लिए अधिक उपयुक्त है में अंतर झूठ: वास्तव में, पर आप अपने खुद के पर्यावरण, देता है अपनी खुद की सेटिंग्स के साथ ( और पर्यावरण चर के विकल्प), जबकि क्रोन पर्यावरण चर का एक न्यूनतम सेट का उपयोग करता है (बस एक उदाहरण के रूप में , पैट में अंतर की जांच करें )।


15
क्रोन के साथ एक और अंतर के रूप में इंगित करने के लायक है, क्या यह atआपके वातावरण को उसी तरह बनाए रखता है जैसे कि जब नौकरी निर्धारित की गई थी: एक ही काम करने वाली निर्देशिका, पर्यावरण चर, ...
कार्लोस कैंपडरो

10
वहाँ भी है batch, जो लगभग समान है at, लेकिन इसके बजाय कम लोड की प्रतीक्षा करेगा, और जाहिर है, at -q zअपने आप से काम अच्छा होगा, जबकि at -q Zसमय का इंतजार करेगा, फिर लोड के लिए प्रतीक्षा करें, और साथ ही अच्छा काम करेगा। वाह, क्या शायद ही कभी इस्तेमाल किया सुविधाओं का एक लोड!
उलरिच श्वार्ज

16

मैं atकमांड का उपयोग तब करता हूं जब मुझे डेटा पर कुछ भारी प्रसंस्करण करने की आवश्यकता होती है, जिसे मैं रात के दौरान निष्पादित करना चाहता हूं, जब मैं अपने कंप्यूटर के पीछे नहीं हूं। बेशक मैं छोड़ने के बाद ही प्रक्रिया शुरू कर सकता था, लेकिन यह एक ऐसी चीज है जिसे मैं भूल जाता हूं।

कमांड का परिणाम स्क्रिप्ट या कमांड के नियमित निष्पादन से अलग नहीं है।


15

जब आपके पास इस तरह के प्रश्न हों, तो हमेशा मैन पेजों पर परामर्श करें। वे बहुत ज्ञानवर्धक हो सकते हैं।

यह क्या करता है

मैन पेज से अंश

NAME
       at, batch, atq, atrm - queue, examine or delete jobs for later execution

DESCRIPTION
       at  and  batch  read  commands  from  standard  input or a specified file
       which are to be executed at a later time, using /bin/sh.

प्रयोग

उपकरण का उपयोग:

Usage: at [-V] [-q x] [-f file] [-mldbv] timespec ...
       at [-V] [-q x] [-f file] [-mldbv] -t time
       at -c job ...
       atq [-V] [-q x]
       atrm [-V] job ...
       batch

at4 आदेशों भी शामिल है ( at, atq, atrm, और batch)। आप नौकरियों को शेड्यूल करने के लिए उपयोग करते हैं atऔर batchयह atqदेखने के लिए कि क्या शेड्यूल किया गया है, और atrmइसे चलाने से पहले नौकरी को हटा दें।

$ at -f <cmd> timspec

Timespec

atनौकरी चलाने का समय अलग-अलग तरीकों से निर्दिष्ट किया जा सकता है।

मैन पेज पर अंश का रूप

POSIX.2 मानक का विस्तार करते हुए, काफी जटिल समय विनिर्देशों की अनुमति देता है। यह एचएच: एमएम के रूप में दिन के एक विशिष्ट समय पर नौकरी चलाने के लिए स्वीकार करता है। (यदि वह समय पहले से ही है, तो अगले दिन मान लिया गया है।) आप मध्य रात्रि, दोपहर या दोपहर (4pm) को भी निर्दिष्ट कर सकते हैं और आपके पास सुबह दौड़ने के लिए AM या PM के साथ एक दिन का समय हो सकता है। या शाम को। आप यह भी कह सकते हैं कि नौकरी किस दिन चलेगी, एक वैकल्पिक वर्ष के साथ महीने के नाम वाले दिन की तारीख देकर, या फॉर्म की तारीख MMDD [CC] YY, MM / DD / [CC] YY, DD.MM। [CC] YY या [CC] YY-MM-DD किसी तिथि के विनिर्देश को दिन के समय के विनिर्देश का पालन करना चाहिए। आप भी अब समय + गिनती समय इकाइयों की तरह समय दे सकते हैं, जहां समय- इकाइयों मिनट, घंटे, दिन हो सकते हैं,

उदाहरण

कहते हैं कि आपके पास यह शेल स्क्रिप्ट है।

$ cat mycrontest.sh

#!/bin/bash
 echo "It is now $(date +%T) on $(date +%A)"

नमूना रन:

$ ./mycrontest.sh
It is now 18:37:42 on Friday

नौकरी प्रस्तुतियाँ पर नमूना:

$ at -f mycrontest.sh  10pm tomorrow
job 14 at Sun Jul  8 22:00:00 2007

$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007

$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007

$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

संदर्भ


मैं का एक बहुत ही अलग संस्करण है लगता है atमेरी Cygwin स्थापना पर उपलब्ध है - यह करने के लिए नहीं जुड़ा हुआ प्रतीत होता है batch, सब पर कोई कम विकल्प का समर्थन कर रहे है, वहाँ कोई शांत विकल्प है, और कोई manया infoपृष्ठों शामिल किए गए हैं।
हाशिम

@ हाशिम - साइबरविन यह खुद जानवर है।
SLM

6

आप बैच, या क्रोन में से किसी एक का उपयोग करके UNIX / Linux में बैच की नौकरियों को निष्पादित कर सकते हैं।

विशिष्ट तिथि और समय का उपयोग करके किसी कार्य को शेड्यूल करें

Syntax:

    $ at time date
For example, to schedule a job at 11 am on May 20, use the following at command.

    $ at 11 am may 20

हां, मुझे "उस" और उसके उपयोग की समझ है। अन्य लोगों ने इसका उत्तर अधिक प्रासंगिक रूप से दिया है।
अक्षय पाटिल

5

आपका नेटवर्क व्यवस्थापक आपको सूचित करता है कि कुछ रखरखाव आपके वेब सर्वर पर शाम 7 बजे से शुरू होगा और 2 बजे तक खत्म हो जाएगा। आप पहले से एक रखरखाव अधिसूचना की सेवा करना चाहते हैं, और आप अपने सिस्टम से अधिकतम अपटाइम चाहते हैं। क्या आप पूरी रात रुकने वाले हैं, विभिन्न कमांड चलाने के लिए तैयार हैं, और फिर बाद में इसे फिर से शुरू करेंगे? नहीं, आप atइन कार्यों को शेड्यूल करने के लिए उपयोग करना चाहते हैं, फिर बिस्तर पर जाएं / स्किरीम खेलें और इसके बारे में भूल जाएं।


1

atरिमाइंडर्स को फायर करने का एक बहुत आसान तरीका हो सकता है। मेरी वर्तमान देव मशीन OSX चल रही है, इसलिए atऔर सरल है notify.bashकि मैं एक साथ cobbled वास्तव में उपयोगी हो सकता है:

$ at 5pm
notify.bash -t 'Work is over' -m "Don't forget to rollback INT environment"
^D
$ at now + 15 minutes
notify.bash -m 'Check tests' -l 'http://integration.example.com/jobs/XXXX'
^D
$ at now + 10 minutes
notify.bash -m 'Check the fridge, pudding should be done!'
^D

notify.bash

#!/bin/bash

DEFAULT_TITLE='Hey! Listen!'
TITLE="$DEFAULT_TITLE"
LINK=
MESSAGE=

function args.help () {
    local error="$1"
    if [ "$error" ]; then
        echo >&2 "$error"
    fi
    cat >&2 <<EOF
Usage $0 <options>

Displays a message using an Applescript notification box

Options
-------

--title <text>    Sets the title, otherwise the default is used ("$DEFAULT_TITLE")
 -t     <text>    Alias for --title

--link  <url>     Add a button to open a link
 -l     <url>     Alias for --link

--body  <text>    Set the message body
 -m     <text>    Alias for --body
EOF
}

function args.verify-not-empty () {
    local value="$1"
    local varname="$2"

    if [ "$value" ]; then
        echo "$value"
    elif [ "$varname" ]; then
        args.help "$varname cannot handle an empty argument"
        exit 1
    else
        args.help \
            "The programmer forgot to include context, something was empty which shouldn't have been, but I can't tell you much more than that. Sorry :("
        exit 1
    fi
}

function args.parse () {
    while [ "$1" ]
    do
        case "$1" in
            '-t' | '--title')
                shift
                TITLE=$(args.verify-not-empty "$1" title)
                shift
                ;;
            '-l' | '--link')
                shift
                LINK=$(args.verify-not-empty "$1" link)
                shift
                ;;
            '-m' | '--body')
                shift
                if [[ "$1" = '-' ]]; then
                    MESSAGE=$(cat -)
                else
                    MESSAGE="$1"
                fi
                MESSAGE=$(args.verify-not-empty "$MESSAGE" body)
                shift
                ;;
            *)
                args.help "Unrecognized argument: $1"
                exit 1
        esac
    done
    if [[ ! "$MESSAGE" ]]; then
        args.help "Message body was not specified"
        exit 1
    fi
}

function message.display-no-link () {
    osascript > /dev/null <<EOF
tell application "Finder"
  activate
  display alert "$TITLE" ¬
          message "$MESSAGE" ¬
          buttons { "Acknowledge" } ¬
          default button "Acknowledge"
end tell
return
EOF
}

function message.display-with-link () {
    osascript > /dev/null <<EOF
tell application "Finder"
  activate
  display alert "$TITLE" ¬
          message "$MESSAGE\n\nClick 'Open Link' to go to $LINK" ¬
          buttons { "Acknowledge", "Open Link" } ¬
          default button "Open Link"
          set response to button returned of the result
          if response is "Open Link" then open location "$LINK"
end tell
return
EOF
}

function message.display () {
    if [ "$LINK" ]; then
        message.display-with-link
    else
        message.display-no-link
    fi
}

args.parse "$@"
message.display
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.