리눅스 시스템이 스크립트를 실행할 시간을 지정할 수 있습니다.
비슷한 기능을 하는 cron
이 있지만,
1회성
작업을 할 때는 at
이 훨씬 편리합니다.
at
의 데몬이 atd
는 리눅스가 시동될 때 자동으로 시작하는 데몬
입니다.
기본적으로 백그라운드에서 실행되며, /var/spool/at
디렉토리를 60초마다 확인합니다. /var/spool/at
디렉토리에 예약된 작업이 현재 시간과 일치하면 해당 작업을 실행합니다.
at -f <파일이름> <예약할시간>
예약할 시간
은 다양한 형식으로 작성이 가능합니다.
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
사용 예시입니다.
$ 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
명령은 sendmail
애플리케이션으로 이메일을 보내기 때문입니다.
따라서
at
명령을 쓸 때는STDOUT
와STDERR
를 리다이렉션 하는 것이 좋습니다.
실습 당시 편의를 위해서 스크립트를 무한루프
로 작성하고 at
명령을 실행했었는데요.
특정 파일
로 끊임없이 리다이렉션
하는 무한루프
였습니다.
실습을 마치기 위해 atq
에서 작업 번호를 확인하고 atrm
으로 모든 작업을 지웠습니다.
atq
에는 아무것도 남아있지 않았고, jobs -l
에도 마찬가지였습니다.
그런데 백그라운드에서 계속해서 특정 파일
로 끊임없이 리다이렉션
하는 무한루프
가 작동하고 있었습니다.
아무리 특정 파일
을 지워도 계속 생성되었습니다.
원인을 찾을 수 없어 결국 재부팅
했고, 프로세스는 멈췄습니다.
혹시 원인을 알고 계시는 분이라면 댓글 달아주시기 바랍니다.
혹시 모르기 때문에
at
명령을 사용할 파일에무한루프
는 넣지 않도록 합시다.
-M
옵션을 이용하면 이메일로 보내지는 출력을 억제할 수 있습니다.
$ at -M -f test1 now