행궁동 데이터 엔지니어

반응형

리눅스에서 at명령어를 사용해서 프로세스 실행을 예약하는 방법입니다.

at명령어 프로그램을 사용하면 일회성의 프로세스(명령어) 실행 예약을 매우 간단하게 할 수 있습니다.

만약 주기적으로 프로세스 실행예약을 하고 싶다면 cron을 사용하시면 됩니다.

(물론 cron을 사용해서도 1회만 명령어를 실행하도록 할 수도 있지만, 일회적인 경우 at명령어 사용방법이 훨씬~ 간단합니다)

 

- 목차

1. at 명령어 사용법, 옵션 설명

2. 사용방법 예시

  • 2.1. at now+값 [minutes, hours, days] 
  • 2.2. at now+값 [minutes, hours, days] -f [실행할 파일명]
  • 2.3 at 시간지정[시간 형식 : hh:mm yyyy-mm-dd, ex) 21:30 2019-12-27]
  • 2.4 at 시간지정 -f [실행할 파일명]

3. at 명령어로 예약한 작업을 저장하는 경로 (/var/spool/at/)

 

1. at 명령어의 사용법과 옵션 설명

at 명령어는 대부분의 리눅스 배포판에 기본으로 설치되어 있습니다. 만약 설치가 안되어 있다면 각 배포판의 패키지 install 명령어로 at명령어 프로그램을 설치할 수 있습니다.

  • ex) apt-get install at <- 데비안 계열 리눅스 , yum install at <- 레드햇 계열 리눅스 배포판

또한 제가 사용법을 정리하지만, 커맨드창에서 man at으로 보다 상세한 명령어 사용법을 확인할 수 있으니 참고하시기 바랍니다.

 

사용법 : at [time]

  • 위의 명령어를 입력하고 나면 표준 입력을 할 수 있는 프롬프트 창이 나온다.

  • 그러면 실행한 명령어를 순서대로 입력 후 [Ctrl]+[D]로 종료(EOT, End Of Transmission) 하면 된다.

  • 위에서 [time]은 hh:mm yyyy-mm-dd (시간:분 연도-월-날짜)의 형식이나 now+값 minutes, hours, days로 현재 시간 +분, 시간, 일 단위로 설정할 수 있다.

  • hh:mm yyyy-mm-dd 예시 : at 21:30 2019-12-25, 2019년 12월 25일 21시 30분에 명령어 실행

  • now+값 minutes, hours, days 예시: at now+5 minutes, 현재 시간 5분 뒤에 명령어 실행

옵션 [1]

  • -V : 버전을 보여준다.

  • -q queue : 실행할 대기 큐를 정할 수 있다. 사용할 수 있는 문자는 a-z, A-Z 까지이며, a가 기본 큐이다. 특별히 b batch 명령에서 사용하는 큐이며 그 외에는 높은 글자를 사용할수록값을 높여서 실행하게 된다. atq로 큐를 확인할 수 있다.

  • -f file : 표준 입력이 아닌, 뒤에 써주는 파일에서 명령어를 읽어 들인다.

  • -m : 실행한 결과를 메일로 통보해준다.

  • -l : atq를 실행하는 alias이다.

  • -d : atrm 을 실행하는 alias이다.

  • -v : 끝난 작업이지만 아직 큐에서 삭제되지 않은 작업을 적어준다.

  • -c : 작업 리스트를 명령행을 포함하여 표준 출력으로 보여준다.

  • TIME : 실행할 시간을 기록한다. 기본적으로 "hh:mm YYYY-MM-DD"로 적는다. hh:mm은 시간으로 24시간제를 기본으로 한다.

 

2. 사용방법 예시

at 명령어는 프로세스의 실행 예약 시간을 절댓값, 현재시간 기준 2가지 방법으로 설정할 수 있습니다.

또한 -f 옵션을 이용하면 표준 입력이 아닌, 파일을 통해 명령어를 받을 수도 있습니다. 

아래는 [절댓값, 현재시간 기준 예약], [표준 입력, 파일 입력] 각각의 조합(총 4가지)으로 명령어를 사용한 예시입니다.

 

사용 예시 1 : at now+값 [minutes, hours, days]

  • at now+값 minutes, hours, days로 현재시간에서 +값만큼 후에 표준 입력(명령어)의 실행을 예약하는 방법입니다. 

  • 예를 들어 at now+5 minutes를 입력하면 5분 뒤에 명령어를 실행하게 됩니다.

  • 해당 명령어를 사용하는 방법은 at [time]을 입력 후 표준 입력화면이 나오면 실행할 명령어를 순서대로 입력하고 [Ctrl]+[D]로 나가면 됩니다.

  • 1분 후에 "Nice"와 "현재 시각" 이 data.txt에 기록되도록 설정하고 테스트한 결과

data.txt에 Nice와 현재시각이 기록

사용 예시 2 : at now+값 [minutes, hours, days] -f [실행할 파일명]

  • 이번에는 특정 시간 이후에 지정한 파일을 실행하도록 설정하는 예시입니다.

  • 저는 현재시간을 data.txt 파일에 누적해서 기록하는(리다이렉션 >>) print_data.sh 스크립트를 만들어 at 명령어를 테스트했습니다.

print_data.sh의 작동

 

  • 1분 후에 print_data.sh 파일이 실행되도록 한 결과

at now+1 minutes -f [파일명]

사용 예시 3 : at 시간지정

  • 이번에는 시간의 절댓값 지정 + 표준 입력으로 명령어를 실행하는 방법입니다.

  • 위에서 시간을 지정하는 형식은 다음의 방법을 따릅니다.

  • hh:mm yyyy-mm-dd, 예를 들어 at 22:03 2019-12-27을 입력하면 2019년 12월 27일 22시 03분에 입력한 명령어를 실행하게 됩니다. 아래에 스크린샷 첨부합니다.

2019년 12월 27일 22:03분에 명령어를 실행하도록 설정

사용 예시 4 : at 시간지정 -f [실행할 파일명]

  • 시간의 절댓값 지정 + 지정한 파일 실행! 

 

3. at 명령어로 예약한 작업을 저장하는 경로 (/var/spool/at/)

at 명령어로 작업을 예약하는데, 그렇다면 예약한 작업은 어디에 저장되는지 궁금한 분들이 있을 것 같습니다(어쩌면... 없을 수도....... 저는 궁금했습니다.... ㄷㄷㄷ).

 

그래서 간단한 스크린샷 몇 장 남깁니다.

 

5분 뒤에 print_data.sh가 실행되도록 작업 예약

/var/spool/at/ 디렉터리를 확인해보니 실행 예약시간 21시 03분의 딱 5분 전인 20:58분에 생성된 "a000c01912a73" 파일이 보입니다.

실행시간 딱 5분전에 생성된 a000.... 파일

해당 파일의 마지막 5행을 tail 명령어로 확인해 본 결과 역시 실행 예약 파일이 맞습니다 ^.^

 

이외에도 at 명령어를 사용할 수 있는 사용자 설정도 할 수 있는데 이건 man at 캡처로 대신합니다. 혹시 사용자 설정이 필요하신 분들은 man at으로 확인 후 적용하시면 되겠습니다.

 

man at

 

혹시 궁금한 사항은 댓글 남겨주시면 답변드리겠습니다. 감사합니다.

 

[1] Now is the time... 님 블로그, at 옵션 정리, https://jazzlife.tistory.com/341

 

 

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band