리눅스에서 at명령어를 사용해서 프로세스 실행을 예약하는 방법입니다.
at명령어 프로그램을 사용하면 일회성의 프로세스(명령어) 실행 예약을 매우 간단하게 할 수 있습니다.
만약 주기적으로 프로세스 실행예약을 하고 싶다면 cron을 사용하시면 됩니다.
(물론 cron을 사용해서도 1회만 명령어를 실행하도록 할 수도 있지만, 일회적인 경우 at명령어 사용방법이 훨씬~ 간단합니다)
at 명령어는 대부분의 리눅스 배포판에 기본으로 설치되어 있습니다. 만약 설치가 안되어 있다면 각 배포판의 패키지 install 명령어로 at명령어 프로그램을 설치할 수 있습니다.
ex) apt-get install at <- 데비안 계열 리눅스 , yum install at <- 레드햇 계열 리눅스 배포판
또한 제가 사용법을 정리하지만, 커맨드창에서 man at으로 보다 상세한 명령어 사용법을 확인할 수 있으니 참고하시기 바랍니다.
위의 명령어를 입력하고 나면 표준 입력을 할 수 있는 프롬프트 창이 나온다.
그러면 실행한 명령어를 순서대로 입력 후 [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분 뒤에 명령어 실행
-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시간제를 기본으로 한다.
at 명령어는 프로세스의 실행 예약 시간을 절댓값, 현재시간 기준 2가지 방법으로 설정할 수 있습니다.
또한 -f 옵션을 이용하면 표준 입력이 아닌, 파일을 통해 명령어를 받을 수도 있습니다.
아래는 [절댓값, 현재시간 기준 예약], [표준 입력, 파일 입력] 각각의 조합(총 4가지)으로 명령어를 사용한 예시입니다.
at now+값 minutes, hours, days로 현재시간에서 +값만큼 후에 표준 입력(명령어)의 실행을 예약하는 방법입니다.
예를 들어 at now+5 minutes를 입력하면 5분 뒤에 명령어를 실행하게 됩니다.
해당 명령어를 사용하는 방법은 at [time]을 입력 후 표준 입력화면이 나오면 실행할 명령어를 순서대로 입력하고 [Ctrl]+[D]로 나가면 됩니다.
1분 후에 "Nice"와 "현재 시각" 이 data.txt에 기록되도록 설정하고 테스트한 결과
이번에는 특정 시간 이후에 지정한 파일을 실행하도록 설정하는 예시입니다.
저는 현재시간을 data.txt 파일에 누적해서 기록하는(리다이렉션 >>) print_data.sh 스크립트를 만들어 at 명령어를 테스트했습니다.
1분 후에 print_data.sh 파일이 실행되도록 한 결과
이번에는 시간의 절댓값 지정 + 표준 입력으로 명령어를 실행하는 방법입니다.
위에서 시간을 지정하는 형식은 다음의 방법을 따릅니다.
hh:mm yyyy-mm-dd, 예를 들어 at 22:03 2019-12-27을 입력하면 2019년 12월 27일 22시 03분에 입력한 명령어를 실행하게 됩니다. 아래에 스크린샷 첨부합니다.
시간의 절댓값 지정 + 지정한 파일 실행!
at 명령어로 작업을 예약하는데, 그렇다면 예약한 작업은 어디에 저장되는지 궁금한 분들이 있을 것 같습니다(어쩌면... 없을 수도....... 저는 궁금했습니다.... ㄷㄷㄷ).
그래서 간단한 스크린샷 몇 장 남깁니다.
5분 뒤에 print_data.sh가 실행되도록 작업 예약
/var/spool/at/ 디렉터리를 확인해보니 실행 예약시간 21시 03분의 딱 5분 전인 20:58분에 생성된 "a000c01912a73" 파일이 보입니다.
해당 파일의 마지막 5행을 tail 명령어로 확인해 본 결과 역시 실행 예약 파일이 맞습니다 ^.^
이외에도 at 명령어를 사용할 수 있는 사용자 설정도 할 수 있는데 이건 man at 캡처로 대신합니다. 혹시 사용자 설정이 필요하신 분들은 man at으로 확인 후 적용하시면 되겠습니다.
혹시 궁금한 사항은 댓글 남겨주시면 답변드리겠습니다. 감사합니다.
[1] Now is the time... 님 블로그, at 옵션 정리, https://jazzlife.tistory.com/341
[Linux] 데이터 랜덤 추출 (sort , shuf) (0) | 2021.02.16 |
---|---|
엘라스틱서치(elasticsearch)에 IP 설정해서 외부에서 접속하기 (0) | 2020.03.30 |
scp 명령어로 파일 전송하기(AWS에서 로컬로 다운받기 예제) (0) | 2019.12.31 |
리눅스(Linux)에서 crontab을 이용해 정기작업 등록하는 방법 (0) | 2019.12.28 |
리눅스(Linux) 문자, 단어, 행(row) 수 출력 명령어 (wc) 사용법 (0) | 2019.12.25 |