কেন আমাদের লিনাক্সে "at" কমান্ডের প্রয়োজন?


38

আমি সেই কোডটি অধ্যয়ন করছিলাম যেখানে atকমান্ডটি ব্যবহৃত হয়। আমি চারপাশে তাকিয়ে দেখলাম যে এটি ব্যাচের কাজগুলি চালাতে ব্যবহৃত হয়। এটি কাজের সময়সূচী করতে ব্যবহৃত হয়। এটি তার ইনপুট, একটি আদেশ এবং একটি সময়, আপেক্ষিক বা পরম হিসাবে দেওয়া হয়।

সুতরাং, আমার প্রথম প্রশ্নটি হ'ল atআদেশটি কেন ব্যবহৃত হয়? কোন পরিস্থিতিতে একজনের ব্যবহার করা দরকার at? যখন কিছু বাশ স্ক্রিপ্ট কোড সফ্টওয়্যার আনইনস্টল করার চেষ্টা করা হয়েছিল এবং যখন কিছু ব্যাকগ্রাউন্ড পরিষেবাদি পুনরায় চালু করা হয়েছিল তখন আমি এটির মুখোমুখি হয়েছি।

আমার দ্বিতীয় প্রশ্ন: কোনও কমান্ড ব্যাচের কাজ হিসাবে মৃত্যুদণ্ড কার্যকর করা এবং সরাসরি কমান্ড কলিংয়ে (বা সাবসিলে) একটি আদেশ কার্যকর করার মধ্যে পার্থক্য কী?

উত্তর:


47

বার্নহার্ডের উত্তরটি সঠিক: বহু-ব্যবহারকারীর সিস্টেমে, রাতের কিছু অযৌক্তিক সময়ে ভারী কর্মসূচি চালানোর ক্ষমতা বিশেষত সুবিধাজনক, উভয়ই চাকরী জমা দেওয়ার ব্যক্তি এবং তার সহকর্মীদের জন্য। এটি "দুর্দান্ত খেলে" অংশ।

আমি আমার বেশিরভাগ পিএইচডি করেছি। কম্পিউটেশন এই ভাবে, সঙ্গে স্ক্রিপ্ট মিশ্রন চমৎকার কমান্ড যা আমার কাজের অগ্রাধিকার পদচ্যুত যখনই অন্যান্য ব্যক্তিদের মেশিন ব্যস্ত রাখার হয়েছিল, যখন অক্ষত তার রাতে সব সিস্টেম সম্পদ বরা করার ক্ষমতা রেখে।

আমার প্রোগ্রামটি চলছে কিনা তা পরীক্ষা করতে এবং প্রয়োজনে এটি পুনরায় চালু করতে আমি খুব একই কমান্ডটি ব্যবহার করেছি।

এছাড়াও, আপনি মনে রাখা উচিত যে, আগে পথ লেখা হয়েছিল পর্দা, tmux , ইত্যাদি, এটা অর্থাত একটি বিচ্ছিন্ন শেল আছে একটি সহজ উপায়, এক যে একবার আপনি সিস্টেম বন্ধ লগ মরবেন না তাই যে।

শেষ অবধি, আপনার এটিও লক্ষ্য করা উচিত যে এটি ক্রোন থেকে আলাদা, এটিও দীর্ঘকাল ধরে রয়েছে। এটা সত্য যে, এ অনিয়মিত থাকাকালীন ক্রন, তাই পুনরাবৃত্তিমূলক হচ্ছে, সিস্টেম কাজ যা সত্যিই সংশোধন অন্তর সব সময় প্রবেশ করুন মৃত্যুদন্ড কার্যকর করা প্রয়োজন জন্য আরো উপযুক্ত পার্থক্য মিথ্যা: আসলে, আপনি আপনার নিজের পরিবেশ, দেয় আপনার নিজের সেটিংসের সাথে ( এবং পছন্দগুলি) এনভায়রনমেন্ট ভেরিয়েবলের, এবং ক্রোন যখন পরিবেশের ভেরিয়েবলের একটি ন্যূনতম সেট ব্যবহার করে (কেবল PATH এর পার্থক্যটি দেখুন , উদাহরণ হিসাবে)।


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 স্ট্যান্ডার্ডকে প্রসারিত করে মোটামুটি জটিল সময়ের নির্দিষ্টকরণের অনুমতি দেয়। এটি দিনের নির্দিষ্ট সময়টিতে একটি চাকরি চালানোর জন্য এইচএইচ: এমএম ফর্মের সময়গুলি গ্রহণ করে। (যদি সেই সময়টি ইতিমধ্যে অতীত হয়ে থাকে, পরের দিনটি ধরে নেওয়া হয়)) আপনি মধ্যরাত, দুপুর বা চা সময় (বিকাল 4 টা) নির্দিষ্ট করে দিতে পারেন এবং সকালে চলার জন্য আপনি সময়কালীন সময়টি AM বা প্রধানমন্ত্রীর সাথে উপভোগ করতে পারেন বা সন্ধ্যা। আপনি কোন দিন yearচ্ছিক বছরের সাথে ফর্ম মাসের নামের দিনটিতে, বা এমএমডিডি [সিসি] ওয়াই, এমএম / ডিডি / [সিসি] ওয়াই ফর্মের একটি তারিখ দিয়ে, কোন দিন কাজটি চালানো হবে তাও আপনি বলতে পারেন, ডিডিএমএম। [সিসি] ওয়াইওয়াই বা [সিসি] ওয়াইওয়াই-এমএম-ডিডি। একটি তারিখের স্পেসিফিকেশন অবশ্যই দিনের সময়ের স্পেসিফিকেশন অনুসরণ করে। আপনি এখনকার মতো সময় + সময়-ইউনিট গণনা করতে পারেন, যেখানে সময়-ইউনিটগুলি মিনিট, ঘন্টা, দিন,

উদাহরণ

বলুন আপনার কাছে এই শেল স্ক্রিপ্ট রয়েছে।

$ 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আমার সাইগউইন ইন্সটলেশনটিতে আমার খুব আলাদা সংস্করণ রয়েছে বলে মনে হয় - এটির সাথে লিঙ্কযুক্ত বলে মনে হয় না batch, কোনও সংক্ষিপ্ত বিকল্প সমর্থন করা যায় না, কোনও শান্ত বিকল্প নেই, এবং কোনও manবা infoপৃষ্ঠাগুলি অন্তর্ভুক্ত নেই।
হাশিম

@ হাশিম - সাইগউইন এটি নিজের জন্তু own
slm

6

আপনি ইউনিক্স / লিনাক্সে তিনটি আদেশের যে কোনও একটিতে - ব্যাচ বা ক্রোন ব্যবহার করে ব্যাচ কাজ সম্পাদন করতে পারেন।

নির্দিষ্ট তারিখ এবং সময় ব্যবহার করে একটি কাজের সময়সূচী করুন

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

আপনার নেটওয়ার্ক প্রশাসক আপনাকে অবহিত করে যে আপনার ওয়েব সার্ভারগুলিতে কিছু রক্ষণাবেক্ষণ ঘটবে যা সন্ধ্যা starting টায় শুরু হবে এবং 2 টা অবধি সমাপ্ত হবে। আপনি আগেই কোনও রক্ষণাবেক্ষণ বিজ্ঞপ্তি পরিবেশন করতে চান এবং আপনি আপনার সিস্টেম থেকে সর্বাধিক আপটাইম চান। আপনি কি সারা রাত ধরে বিভিন্ন কমান্ড চালানোর জন্য প্রস্তুত এবং পরে আবার এটি শুরু করবেন? না, আপনি atএই কাজগুলির সময়সূচীটি ব্যবহার করতে চান , তারপরে বিছানায় গিয়ে / আকাশছোঁয়া খেলুন এবং এটিকে ভুলে যান।


1

atঅনুস্মারকগুলি বন্ধ করার সত্যিই সহজ উপায়ও হতে পারে। আমার বর্তমান ডেভ মেশিনটি ওএসএক্স চলছে, সুতরাং যে atসহজ এবং notify.bashআমি একসাথে বাঁধা ছিল তা সত্যিই সহায়ক হতে পারে:

$ 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.