crontab이란?
리눅스의 crontab을 사용하면 특정 시간마다 특정 작업을 할 수 있다.
예를 들어 일주일에 한 번 오래된 파일을 지운다거나, 파일을 갱신한다거나의 작업을 쉽게 구현할 수 있다.
crontab 실습
실습을 위해 사이드 프로젝트를 운영중인 ec2에 접속한다(Amazone Linux)
crontab -e 명령어로 crontab task를 등록할 수 있다.
crontab 기본 문법은 아래와 같다.
m h dom mon dow <command>
- m: 분(0~59)
- h: 시(0~23)
- dom: day of month 날짜(1~31)
- mon: month 달(1~12)
- dow: day of week 요일(0~7) 일요일이 0이다.
테스트로 매 분마다 Hello World를 출력하는 task를 만들어보자
* * * * * echo "Hello World" >> <로그를 저장하고 싶은 곳의 절대 경로>/crontab-test.log
에디터로 crontab 문법에 맞고 작성하고 저장하면 crontab: installing new crontab 가 출력된다.
crontab으로 오래된 로그 지우기
command가 길다면 셸 스크립트를 만들어서 그 스크립트를 실행시키면 된다.
매일 오전 9시 생성된지 7일이 지난 로그는 삭제하는 셸 스크립트를 작성해보자
# !bin/bash
find <삭제하고 싶은 로그가 있는 폴더의 절대경로> -name '*.log' -mtime +7 -delete
아무런 설정을 해주지 않는다면 crontab은 UTC 기준이므로 -9 시간을 해서 계산해줘야한다.
0 0 * * * <셸 스크립트의 절대경로>
crontab으로 node.js 스크립트 실행하기
crontab으로 간단한 node.js 스크립트를 실행할 순 없을까? 우선 node 의 위치부터 파악해야한다. 필자의 경우 nvm을 사용해 node를 설치해줬으므로 이 경로에 있었다.
[ec2-user@test]$ which node
~/.nvm/versions/node/v16.20.2/bin/node
slack으로 메시지를 보내는 예제를 생각해보자
정말정말 야매로 만들었지만 잘 동작하는 코드이다.
const axios = require('axios');
(async () => {
await axios.post(<웹 훅 URL>, { attachments: [{
color: '#29FFF2',
title: '테스트 메시지!',
text: new Date().toDateString(),
fields: [{ title: '현재 시각', value: new Date().toDateString(), short: false }],
}] })
})();
이제 크론탭으로 30분마다 실행되도록 설정해보자 여기서 node는 위에서 which 명령어로 찾아낸걸 절대경로로 써줘야한다.
테스트로 매 분마다 실행하도록 설정해주었다.
* * * * * /home/ec2-user/.nvm/versions/node/v16.20.2/bin/node /home/ec2-user/reportSlack.js
30분마다 실행되도록 하려면 /30 으로 표현해주면 된다. /(반복하고 싶은 시간) ex) */10(10분마다), */15(15마다)
*/30 * * * * /home/ec2-user/.nvm/versions/node/v16.20.2/bin/node /home/ec2-user/reportSlack.js
참고
쉘스크립트와 crontab을 이용해 주기적으로 로그 삭제하기
안드로이드 개발자에서 서버개발자로 업무를 바꾼지 3개월이 좀 넘었다. 안드로이드를 할때에는 리눅스 명령들을 활용할 일이 별로 없었는데, 이번에 주문시스템을 개발하면서 로그환경을 구
cinabrosite.wordpress.com
slack incoming webhook 만들기
incoming webhook을 사용하면 슬랙 외부에서도 특정 채널에 메시지를 보낼 수 있다.
roseline.oopy.io
'인프라' 카테고리의 다른 글
[AWS] Route53 설정 살펴보기 (2) | 2023.11.22 |
---|