일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- nodejs
- 클라우드
- RAPA
- network
- PaaS
- docker
- IaaS
- OpenStack
- RAID
- gns3
- worker
- kubernetes
- PAT
- 명령어
- 용어정리
- 실습
- 이론
- git
- MongoDB
- node.js
- dockerfile
- 네트워크
- Docker Swarm
- Docker-compose
- 쿠버네티스
- Javascript
- 도커
- express
- mysql
- 개념
- Today
- Total
융융이'Blog
crontab 사용하기 본문
크론 스케쥴 편집하기
아래 명령어를 실행하면 현재 로그인된 유저에 대해 cron job을 등록 할 수 있다.
crontab -e
명령어를 실행하면 디폴트 text 편집기가 열리면서 cron의 설정파일을 수정할 수 있게된다. 이 편집화면에서 원하는대로 설정을 변경한 후 저장하면 된다.
작업 스케쥴 설정
작업 스케쥴을 설정할때는 순서대로 min > hour > day(일) > month > weekday(요일)를 한칸씩 띄워서 적어주면 된다.
예를들어 40 5 * * * /some/job 의 경우 job을 매 05시 11분에 실행하라는 뜻이다.
좀더 다양한 예시들을 살펴보자.
- * * * * * 1분 마다 실행
- 30 * * * * 매시 30분마다 실행
- 0 0 10 * * 매월 10일 0시 0분에 실행
- * * 10 * * 매월 10일에 1분 마다 실행
- 0 0 10 4 * 매년 4월 10일에 0시 0분에 실행
- 0 0 * * 1 매주 월요일 0시 0분에 실행 (요일의 숫자표현: 일0 월1 화2 수3 목4 금5 토6)
- 0 * * * 1 매주 월요일 매시 0분에 실행
시간 포멧은 https://crontab.guru/과 같은 사이트를 이용하면 좀더 쉽게 보면서 만들어낼 수 있다.
작업에 대한 로그(Log)를 남기는 방법
cron job들은 자동으로 수행되기때문에 별도로 작업 로그를 남기지 않으면 해당 작업이 정상적으로 수행되었는지 체크하기가 매우 까다롭다. cron job의 수행 여부 자체는 시스템 로그에 (Ubuntu의 경우 /var/log/syslog 파일을 확인하면 됨) 남기때문에 볼 수 있지만, 실제 해당 job이 실행되면서 job에서 발생시키는 로그는 따로 기록을 해주어야한다.
cron job을 등록할 때 아래와 같은 명령어를 사용하면 로그 파일을 남길 수 있다.
```0 0 * * * /some/job > ~/log/job_date +\%Y\%m\%d\%H\%M\%S
.log 2>&1``
위 명령어가 잘 이해가 가지 않는 사람들을 위해 좀더 자세하게 설명을 해보려고 한다.
로그파일의 파일이름에 실행된 날짜/시간을 넣는 방법
date 명령어를 이용하면 지정한 포메터 대로 현재 시간을 출력할 수 있다. 쉘 스크립트에서 문자를 이용하여
명령어` 를 감싸면 해당 명령어의 stdout을 return해주는데 이를 이용하여 파일이름을 정해줄 수 있다.
로그 파일명을 다음과 같이 지정한 경우 job_date +\%Y\%m\%d\%H\%M\%S
.log 실제 파일명은 job_20180309201123.log 와 같이 시간값으로 치환되어 결정된다.
/some/job의 출력(stdout)을 로그 파일로 리디렉션
리디렉션 기호인 >를 이용하여 stdout을 파일로 기록하려면 다음과 같이 하면 된다.
해당 로그 파일에 overwrite를 하고싶다면
/some/job > ~/log/job_`date +\%Y\%m\%d\%H\%M\%S`.log
해당 로그파일의 기존 내용을 보존하면서 append를 하고싶다면
/some/job >> ~/log/job_`date +\%Y\%m\%d\%H\%M\%S`.log
/dev/null의 의미?
위에서 알아본 것과 반대로 작업 로그가 필요 없다고 생각되는 경우는 /dev/null 로 redirect를 해주면 된다. /dev/null 로 들어오는 입력은 모두 버려진다.
마지막 2>&1의 의미?
- 1: stdout
- 2: stderr
- >: redirection
- 2>&1: stderr를 stdout으로 리디렉션해서 stdout과 동일하게 처리
'2022이전 > Linux' 카테고리의 다른 글
Linux (0) | 2020.05.13 |
---|---|
Nginx 와 Apache (0) | 2020.05.03 |
라즈베리 파이 보안 설정 (0) | 2020.05.02 |
접속 실패 로그 확인 (0) | 2020.05.01 |
iptables 사용하기 (0) | 2020.05.01 |