[shell script] at 명령으로 작업 예약하기

HYEOB KIM·2022년 4월 27일
0

Shell

목록 보기
61/71

at

리눅스 시스템이 스크립트를 실행할 시간을 지정할 수 있습니다.

비슷한 기능을 하는 cron이 있지만,

1회성 작업을 할 때는 at이 훨씬 편리합니다.

atd

at의 데몬이 atd는 리눅스가 시동될 때 자동으로 시작하는 데몬입니다.

기본적으로 백그라운드에서 실행되며, /var/spool/at 디렉토리를 60초마다 확인합니다. /var/spool/at 디렉토리에 예약된 작업이 현재 시간과 일치하면 해당 작업을 실행합니다.

at 명령 형식 이해하기

at -f <파일이름> <예약할시간>

예약할 시간

예약할 시간은 다양한 형식으로 작성이 가능합니다.

  • 10:15
  • 10:15PM
  • now, noon, midnight, teatime
  • now + 25 minutes
  • 10:15PM tomorrow
  • 10:15 + 7 days
  • MMDDYY, MM/DD/YY, DD.MM.YY
  • Jul 4
  • Dec 25

atq

at으로 예약되어 있는 작업의 목록을 볼 수 있습니다.

$ atq
3       Wed Apr 27 05:41:00 2022 = hyeob
2       Wed Apr 27 05:41:00 2022 = hyeob
1       Wed Apr 27 05:39:00 2022 = hyeob

앞의 1, 2, 3작업 번호를 뜻합니다.

atrm

예약된 작업을 제거할 수 있습니다.

atrm <작업 번호>

간단한 atrm 사용 예시입니다.

$ atq
3       Wed Apr 27 05:41:00 2022 = hyeob
2       Wed Apr 27 05:41:00 2022 = hyeob
1       Wed Apr 27 05:39:00 2022 = hyeob

$ atrm 1
Warning: deleting running job

$ atq
3       Wed Apr 27 05:41:00 2022 = hyeob
2       Wed Apr 27 05:41:00 2022 = hyeob

at 사용시 유의사항

at을 사용해 스크립트가 실행되면 출력값이 아무것도 나타나지 않습니다.

기본적으로 at 명령은 sendmail 애플리케이션으로 이메일을 보내기 때문입니다.

따라서 at 명령을 쓸 때는 STDOUTSTDERR를 리다이렉션 하는 것이 좋습니다.

+) 개인적인 경험

실습 당시 편의를 위해서 스크립트를 무한루프로 작성하고 at 명령을 실행했었는데요.

특정 파일로 끊임없이 리다이렉션하는 무한루프였습니다.

실습을 마치기 위해 atq에서 작업 번호를 확인하고 atrm으로 모든 작업을 지웠습니다.

atq에는 아무것도 남아있지 않았고, jobs -l에도 마찬가지였습니다.
그런데 백그라운드에서 계속해서 특정 파일로 끊임없이 리다이렉션하는 무한루프가 작동하고 있었습니다.

아무리 특정 파일을 지워도 계속 생성되었습니다.

원인을 찾을 수 없어 결국 재부팅했고, 프로세스는 멈췄습니다.

혹시 원인을 알고 계시는 분이라면 댓글 달아주시기 바랍니다.

혹시 모르기 때문에 at 명령을 사용할 파일에 무한루프는 넣지 않도록 합시다.

-M 옵션 이용하기

-M 옵션을 이용하면 이메일로 보내지는 출력을 억제할 수 있습니다.

$ at -M -f test1 now
profile
Devops Engineer

0개의 댓글