-
[Linux] 특정 시간에 반복적으로 작업하기IT Tech/Linux 2021. 2. 2. 12:17
Cron과 Crontab
유닉스/리눅스 계열에서는 특정 작업을 하는 데몬을 크론(Cron)이라고 부릅니다. 그리고 이 크론을 특정 시각마다 특정 업무를 하도록 설정해 특정 파일에 저장하는 것이 크론탭(Crontab)입니다.
Crontab 설정하는 방법
Crontab을 설정하는 방법은 두가지가 있습니다.
-
crontab -e 명령어를 사용해 등록
-
/etc/crontab에 직접 등록하는 방법 -> 이 경우는 vi, nano와 같은 편집기로 crontab 파일을 열어 직접 편집해야 합니다.
crontab -e 명령어를 사용해 등록
-
crontab -e 명령어를 입력합니다.
-
첫 입력 시 에디터를 선택하는 창이 나옵니다. 만약 이후에 변경하고 싶다면 select-editor 명령어를 통해 다시 설정할 수 있습니다.
-
에디터를 선택하고 저장한 후 창에서 빠져나오면 /var/spool/cron/crontabs/ 폴더에 root라는 파일이 생성됩니다.
crontab 명령어
-
crontab -e : 명령을 등록, 편집 – 맨 처음에 사용 시 편집기를 선택할 수 있습니다.
-
crontab -d : 등록된 명령을 삭제
-
crontab -l : 현재 등록된 리스트 출력
-
crontab -l -u otheruser : otheruser 사용자가 등록한 crontab 리스트 출력
-
crontab -r : 현재 사용자가 등록한 crontab 전체 삭제
편집기에서 직접 편집
두번째 방법은 vi, nano와 같은 에디터로 파일을 직접 수정하는 방식입니다.
$ vi /etc/crontab
크론탭 설정 규칙
출처 : https://happist.com/553442/ less /etc/crontab 실행 결과 list-timers
대략적으로 crontab을 이용해 특정 시간에 수행되는 서비스를 살펴보았습니다.
특정 시간에 서비스를 실행하는 것은 crontab 외에도 list-timers란 녀석도 있습니다. 이 시스템은 crontab과 달리 자동 실행할 서비스의 남은 시간과 다음 실행 시점과 같이 더욱 세부적인 정보를 표출해주며, crontab은 명령어를 복사해서 따로 실행해야 하는 번거로움이 있는 반면, list-timers는 바로 명령을 내릴 수 있어 일회성 작업을 가능하게 합니다.
systemctl list-timers 실행 결과 목록 중에서 apt-daily.timer를 한번 살펴 볼까요??
$ systemctl status apt-daily.timer
상태가 활성화로 돼있는 것을 확인할 수 있습니다. 그리고 Loaded 부분에 명시된 해당 디렉토리에 어떠한 주기로 실행해야하는지 설정 돼있는 파일이 있습니다.
이렇게 서비스 별로 볼 수도 있지만 활성화 돼있는 타이머 목록을 볼 수 있는 디렉토리가 있습니다.
ls /etc/systemd/system/timers.target.wants/
해당 디렉토리에 있는 타이머들은 실제 위에서 보았던 /lib/systemd/system/... 경로에 있는 타이머와 심볼릭 링크가 되어있습니다.
한번 apt-daily-upgrade.timer를 살펴볼까요?
After=apt-daily.timer를 살펴보면, apt-daily.timer와 apt-daily-upgrade.timer에 의존성을 부여한 것을 알 수가 있습니다.
의존성을 부여할 수 있다는 것은 시스템 오류를 방지할 수 있는 효과적인 방법 중 하나이며 이것은 crontab에 비해 안전하다고 할 수 있습니다.
예를 들어, 작업 A를 수행하기 전에 데이터 백업이 시행이 되어야 하는데, 데이터 백업이 예상보다 시간이 많이 지연됐다고 가정해 봅시다.
이럴 경우, 의존성을 가지지 않는다면 백업이 완료되지 않은 상황에서 작업 A가 수행되어 문제가 발생할 수 있습니다.
실제 명령어 조회
$ cd /lib/systemd/system $ ls *.service $ vi apt-daily.service
-
ExecStartPre : 실제 명령어 수행 전에 수행해야할 것
-
ExecStart : 실제 수행 명령어
마무리
Crontab과 list-timers에 대해서 알아보았습니다.
Crontab은 사용하기는 간단하지만 list-timers에 비해 제공되는 정보나 확장성에 대해 불리한 모습을 보여줬습니다.
그러므로, 한 가지만 사용하는 것보단 상황에 맞게 선택하여 사용하는 것이 중요합니다.
'IT Tech > Linux' 카테고리의 다른 글
[Linux] 파일 접근 허가와 사용자 추가 (0) 2021.02.02 [Linux] 특정 조건으로 파일 찾기 (0) 2021.02.02 [Linux] 서비스 포트 관리 (0) 2021.01.28 [Linux] grep (0) 2021.01.23 [Linux] more/less 사용과 탭/화살표 사용법 (0) 2021.01.23 -