Linux에서“at”명령이 필요한 이유는 무엇입니까?


38

at명령이 사용되는 코드를 연구하고있었습니다 . 나는 둘러보고 배치 작업을 실행하는 데 사용된다는 것을 알았습니다. 작업을 예약하는 데 사용됩니다. 입력, 명령 및 시간, 상대 또는 절대로 제공됩니다.

그래서 첫 번째 질문은 왜 at명령이 사용됩니까? 어떤 상황에서 사용해야 at합니까? 소프트웨어를 제거하려고하는 bash 스크립트 코드가 있고 백그라운드 서비스를 다시 시작해야 할 때 문제가 발생했습니다.

두 번째 질문 : 명령을 배치 작업으로 실행하는 것과 명령을 직접 호출하거나 하위 쉘에서 실행하는 것과의 차이점은 무엇입니까?

답변:


47

Bernhard의 답변은 맞습니다. 다중 사용자 시스템에서, 불경건 한 밤 시간에 무거운 프로그램을 실행하는 기능은 작업을 제출하는 사람과 동료 모두에게 특히 편리합니다. 그것은 "좋은 연주"의 일부입니다.

나는 대부분의 박사 학위를 받았다. 다른 사람들이 기계를 바쁘게 유지할 때마다 내 작업의 우선 순위를 내린 멋진 명령 과 스크립트를 결합하여 밤에 모든 시스템 리소스를 호그하는 능력을 그대로 유지합니다.

동일한 명령을 사용하여 프로그램이 실행 중인지 확인하고 필요한 경우 다시 시작했습니다.

또한 at at screen, tmux 등 으로 작성 되었으므로 분리 된 쉘 (즉, 시스템에서 로그 오프 한 후에는 죽지 않는 쉘)을 갖는 간단한 방법이었습니다.

마지막으로, 오랫동안 사용되어 온 cron과는 다릅니다. 크론, 그래서 반복되는, 정말 고정 간격으로 영원히 실행해야 할 시스템 작업에 더 적합 반면에이 가끔 있다는 사실의 차이 거짓말은 : 사실, 에서가 (자신의 설정으로, 당신에게 당신의 자신의 환경을 제공합니다 하면서 환경 변수의 선택), 크론은 환경 변수의 최소 세트를 사용한다 (단 차이 확인 PATH )를 예로서.


15
cron과의 또 다른 차이점으로 지적 할 가치가있는 것은 at동일한 작업 디렉토리, 환경 변수 등 작업을 예약 할 때와 같은 방식으로 환경 을 유지 한다는 것입니다.
Carlos Campderrós

10
이이기도 batch거의 동일하다, at분명히, 대신 낮은 부하를 기다릴 것이고, at -q z반면에 의지 좋은 자체에 의한 작업은, at -q Z뿐만 아니라 좋은에게 작업을 한 후, 시간을 기다릴 드롭 부하 기다린 것입니다. 와우, 거의 사용하지 않는 기능들이 너무나 많습니다!
Ulrich Schwarz

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). atbatch을 사용 하여 작업을 예약하고, 예약 된 atq내용을보고 atrm, 작업을 실행하기 전에 제거합니다.

$ at -f <cmd> timspec

타임 스펙

at작업 실행 시간 은 다른 방식으로 지정할 수 있습니다.

맨 페이지에서 발췌 양식

At는 상당히 복잡한 시간 사양을 허용하여 POSIX.2 표준을 확장합니다. 특정 시간에 작업을 실행하기 위해 HH : MM 형식의 시간을 허용합니다. (이 시간이 이미 지났다면 다음 날로 가정합니다.) 또한 자정, 정오 또는 티타임 (오후 4시)을 지정할 수 있으며 오전에 AM 또는 PM으로 접미사로 붙일 수 있습니다. 또는 저녁. 옵션 연도를 사용하여 month-name day 형식의 날짜를 제공하거나 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페이지가 포함되어 있습니다.
Hashim

@Hashim-cygwin은 자신의 짐승입니다.
slm

6

at, batch 또는 cron의 세 명령 중 하나를 사용하여 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

예, "at"와 그 사용법에 대한 이해가 있습니다. 다른 사람들이 더 적절하게 대답했습니다.
Akshay Patil

5

네트워크 관리자는 오후 7시에 시작하여 오전 2시에 끝나는 웹 서버에 일부 유지 관리가 수행 될 것임을 알려줍니다. 사전에 유지 보수 알림을 제공하고 시스템의 최대 가동 시간을 원합니다. 밤새도록 여러 가지 명령을 실행할 준비가 된 후 나중에 다시 시작 하시겠습니까? 아니요, at이러한 작업을 예약하는 데 사용 하고 스카이 림에서 잠자리에 들고 잊어 버리십시오.


1

at또한 알림을 해제하는 정말 편리한 방법이 될 수 있습니다. 현재 개발중인 컴퓨터는 OSX를 실행하고 있으므로 함께 모은 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.