at
명령이 사용되는 코드를 연구하고있었습니다 . 나는 둘러보고 배치 작업을 실행하는 데 사용된다는 것을 알았습니다. 작업을 예약하는 데 사용됩니다. 입력, 명령 및 시간, 상대 또는 절대로 제공됩니다.
그래서 첫 번째 질문은 왜 at
명령이 사용됩니까? 어떤 상황에서 사용해야 at
합니까? 소프트웨어를 제거하려고하는 bash 스크립트 코드가 있고 백그라운드 서비스를 다시 시작해야 할 때 문제가 발생했습니다.
두 번째 질문 : 명령을 배치 작업으로 실행하는 것과 명령을 직접 호출하거나 하위 쉘에서 실행하는 것과의 차이점은 무엇입니까?
답변
Bernhard의 답변은 맞습니다. 다중 사용자 시스템에서, 불경건 한 밤 시간에 무거운 프로그램을 실행하는 기능은 작업을 제출하는 사람과 동료 모두에게 특히 편리합니다. 그것은 “좋은 연주”의 일부입니다.
나는 대부분의 박사 학위를 받았다. 다른 사람들이 기계를 바쁘게 유지할 때마다 내 작업의 우선 순위를 내린 멋진 명령 과 스크립트를 결합하여 밤에 모든 시스템 리소스를 호그하는 능력을 그대로 유지합니다.
동일한 명령을 사용하여 프로그램이 실행 중인지 확인하고 필요한 경우 다시 시작했습니다.
또한 at at screen, tmux 등 으로 작성 되었으므로 분리 된 쉘 (즉, 시스템에서 로그 오프 한 후에는 죽지 않는 쉘)을 갖는 간단한 방법이었습니다.
마지막으로, 오랫동안 사용되어 온 cron과는 다릅니다. 크론, 그래서 반복되는, 정말 고정 간격으로 영원히 실행해야 할 시스템 작업에 더 적합 반면에이 가끔 있다는 사실의 차이 거짓말은 : 사실, 에서가 (자신의 설정으로, 당신에게 당신의 자신의 환경을 제공합니다 하면서 환경 변수의 선택), 크론은 환경 변수의 최소 세트를 사용한다 (단 차이 확인 PATH )를 예로서.
답변
at
컴퓨터 뒤에 있지 않을 때 밤에 실행하려고하는 데이터에 대해 무거운 처리를 수행해야 할 때 명령을 사용 합니다. 물론 떠난 직후에 과정을 시작할 수는 있지만 잊어 버리는 경향이 있습니다.
명령의 결과는 정기적으로 스크립트 나 명령을 실행하는 것과 다르지 않습니다.
답변
이와 같은 질문이 있으면 항상 맨 페이지를 참조하십시오. 그들은 매우 깨달을 수 있습니다.
그것이하는 일
맨 페이지에서 발췌
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
at
4 개 명령을 포함한다 ( at
, atq
, atrm
, 및 batch
). at
및 batch
을 사용 하여 작업을 예약하고, 예약 된 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, 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
답변
네트워크 관리자는 오후 7시에 시작하여 오전 2시에 끝나는 웹 서버에 일부 유지 관리가 수행 될 것임을 알려줍니다. 사전에 유지 보수 알림을 제공하고 시스템의 최대 가동 시간을 원합니다. 밤새도록 여러 가지 명령을 실행할 준비가 된 후 나중에 다시 시작 하시겠습니까? 아니요, at
이러한 작업을 예약하는 데 사용 하고 스카이 림에서 잠자리에 들고 잊어 버리십시오.
답변
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