2024. 1. 16. 08:37ㆍ잡학
linux crontab
Linux 일정(시간) 작업 실행 등록 - crontab
특정 시간 / 주기를 등록 하여 원하는 작업을 자동으로 실행시켜 주는 linux 전용 작업 스케쥴러를 crontab이라고 합니다.
crontab 등록된 작업들은 commend (shell)이 실행 여부와 상관없이 동작하기 때문에 서버 등을 운영할 때 편리합니다.
< crontab 리스트 확인 >
crontab -l
현재 등록된 스케쥴의 리스트를 확인할 수 있습니다.
* 없으면 no crontab for <user명 >을 출력하며 끝납니다.
< crontab schedule 등록 >
crontab -e
스케쥴의 등록 형식은 다음과 같습니다.
각 *에 해당하는 부분이 분,시,일,월,요일 등을 기재할 수 있으며
그대로 *을 적어놓으면 해당 시간열에 존재하는 모든 숫자를 포함
< crontab 구문 >
m h d mon dow [flags] command
시간 간격은 cron에 명령 실행 빈도를 알려줄 수 있는 5자리 필드입니다. 이는 모든 cron 구현의 핵심 기능이며 cron이 반복 작업을 처리하는 방법을 구체적이고 유연하게 지정할 수 있습니다.
- m = 0에서 59 사이의 분
- h = 0에서 23 사이의 시간
- d = 1에서 31 사이의 날짜
- mon = 1에서 12 사이의 월
- dow = 0에서 6 사이의 요일. 0은 일요일입니다.
이 flags필드는 단일 명령에 대해 cron이 작동하는 방식을 수정하는 옵션 세트입니다.
예를 들어 -ncron이 시스템 메일을 보내는 것을 중지하는 옵션을 포함할 수 있습니다.
이 command필드는 cron이 설정된 간격으로 실행되는 명령입니다.
이는 사용자가 작성한 쉘 스크립트이거나 플래그가 있는 프로그램 경로일 수 있습니다.
단일 crontab line에서 이 모든 것을 함께 사용하여 작업에 대한 특정 시간 간격을 만들 수 있습니다.
예를 들어, 다음 crontab line을 작성 매년 7월 24일 오전 2시 30분에 Ubuntu 시스템에서 스크립트를 실행할 수 있습니다.
30 2 24 7 * /home/$USER/myscript.sh
< crontab 실행이 안되는 경우 >
설정을 했으나 작동이 안되는 경우가 발생합니다.
커맨드 창에서는 crontab의 작동의 유무를 확인할 수 없으므로 스케쥴 등록후 확인은 반드시 해야합니다.
만약 실행되지 않는 경우 확인 방법에 대해 알아 보겠습니다.
1. 특정파일이 정상적인 경로로 등록되었는지 확인
파일을 실행시킬 때 절대경로와 상대경로 모두 가능
crontab / (최상위 경로)에서 명령을 실행한다고 가정하고 반드시 절대 경로로 등록해주는 걸 권장한다.
즉 crontab 등록시키기 전에 해당 명령어를 / 경로에서 실행시켜 보고 등록
2. 환경 변수
crontab 명령어 실행시 완전히 별도의 shell을 띄워 실행하므로 관련된 환경변수 설정해야 합니다.
만약 해당 프로그램이 등록된 환경변수를 작업을 수행해야 할 경우
crontab -e 실행 스케쥴 목록 상단에 환경 변수를 미리 등록
crontab 환경변수 이미지
3. 사용 환경 / linux timezone 일치하는지 확인
AWS를 사용하는 경우 crontab 사용시 지금 문제가 발생한다.
crontab 자체는 정상적으로 동작하고 있지만 시간대가 다른 시간에서 작동을 합니다.
첨부 이미지에서 localtime / timezone 정보를 동일하게 수정
4. log를 통해 실행에 문제가 된 원인 확인
/var/log/cron ( log 확인 )
스케쥴 등록 된 작업자체의 Error 발생
timezone 다르거나 / 등록 형식 자체 오류 이 경우 crontab 오류로 실행이 안되고 있지만 log 기록이 안됩니다.
< crontab 작동 확인 >
tail -f /var/log/cron
Jan 5 11:23:51 서버명 crontab[299045]: (root) END EDIT (root)
Jan 5 11:24:01 서버명 crond[13250]: (root) RELOAD (/var/spool/cron/root)
Jan 5 11:28:01 서버명 CROND[299186]: (root) CMD (실행파일.sh)
Jan 5 11:29:01 서버명 CROND[299216]: (root) CMD (실행파일.sh)
Jan 5 11:30:01 서버명 CROND[299255]: (root) CMD (실행파일.sh)
Jan 5 11:30:01 서버명 CROND[299256]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 5 11:31:01 서버명 CROND[299289]: (root) CMD (실행파일.sh)
Jan 5 11:32:01 서버명 CROND[299321]: (root) CMD (실행파일.sh)
Jan 5 11:33:01 서버명 CROND[299352]: (root) CMD (실행파일.sh)
Jan 5 11:34:01 서버명 CROND[299381]: (root) CMD (실행파일.sh)
Jan 5 11:35:01 서버명 CROND[299410]: (root) CMD (실행파일.sh)
위의 예제처럼 현재 실행 되고 있는 crontab 스케쥴 작업 모니터링 할 수 있습니다.
< crontab schedule 삭제 >
모든 스케쥴을 삭제 명령어
$ crontab -r
crontab -e를 실행하여 에디터로 스케쥴을 직접 삭제해도 문제가 없습니다.
'잡학' 카테고리의 다른 글
Maya 자동으로 꺼지는 현상 (38) | 2024.01.29 |
---|---|
Adobe Genine Service Alert 올바르지 않는 앱 해결방법 (13) | 2023.11.27 |
MoUSO 핵심 작업자 프로세스란 무엇입니까? (4) | 2023.11.23 |
런던의 가장 특이한 관광 명소 8곳 (11) | 2023.11.17 |
탄소 배출은 생각보다 빨리 1.5C 기후 임계값을 위협 - 보고서 (9) | 2023.11.16 |