크론표현식은 정처기 실기 준비할 때 봤던건데 이 역시 실기를 준비할땐 도대체 어디서 써먹나..했던 것..
자격증 공부의 단점.. 도대체 이걸 어디서 써먹는지 모른다.. 왜냐면 개념만 책으로 공부하니까 외우기 급급함.
정처기 자격증을 따놓고도 이게 도대체 먼지 몰랐던 나.. 대가리박아
일단 내가 cron을 써야하는 이유는 정해진 시간에 매일매일 텔레그램 메시지를 보내야하기 때문이다. 하루에 한번 새로운 게임이 있다면 정해진 시간에 텔레그램 발송 모듈을 실행시켜서 메시지를 전송하는 것.
필드명 | 값의 허용 범위 | 허용된 특수문자 |
---|---|---|
초 (Seconds) | 0 ~ 59 | , - * / |
분 (Minutes) | 0 ~ 59 | , - * / |
시 (Hours) | 0 ~ 23 | , - * / |
일 (Day) | 1 ~ 31 | , - * ? / L W |
월 (Month) | 1 ~ 12 or JAN ~ DEC | , - * / |
요일 (Week) | 0 ~ 6 or SUN ~ SAT | , - * ? / L # |
연도 (Year) | empty or 1970 ~ 2099 | , - * / |
*
: 모든 값
?
: 특정한 값이 없음
-
: 범위 (예) 월요일부터 수요일까지는 MON-WED
,
: 특별한 값일 때만 동작 (예) 월,수,금 MON,WED,FRI
/
: 시작시간 / 단위 (예) 0분부터 매 5분 0/5
L
: 일에서 사용하면 마지막 일, 요일에서는 마지막 요일(토요일)
W
: 가장 가까운 평일 (예) 15W는 15일에서 가장 가까운 평일 (월 ~ 금)을 찾음
#
: 몇째주의 무슨 요일을 표현 (예) 3#2 : 2번째주 수요일
우와. 이거 다 정처기 공부할 때 외웠던 거다.
근데 이렇게 외울 필요 없다.👉crontab guru 아주 친절한 사이트가 있음😊
crontab -e
명령어로 설정파일에 접근editor
설정 (vim.tiny
로 선택해줬다. 아마 3번)crontab -l
로 제대로 바뀌었는지 확인도 가능하다.ec2서버
에서 작업중이기 때문에 여기서 cron을 설정해주면 된다.i
를 눌러서 insert
할 수 있게 진입하고, 맨 아래로 내려가서 표현식과 내가 사용하는 python
, 정해진 시간마다 실행시켜줄 파일의 파일경로
를 차례대로 입력해주면 된다.>>
를 붙이고 로그를 저장해줄 경로를 입력해주면 됨.esc
를 누른 다음 :wq
를 눌러서 저장하고 나올 수 있다.내가 생각하기에는 현재 작업중인 디렉토리로 변경해주고 이를 현재 경로로 지정해준 다음에 os.chdir
을 해주면 정상적으로 작동하리라 생각했다. 근데 이렇게하고 크론을 실행하면 현재 작업디렉토리가 /home/ubuntu
가 되어서..(되게 당연한 건데 이걸 왜 저게 된다고 생각했는지) 내가 필요한 디렉토리인 /home/ubuntu/seulki_package/Crawling
에 접근하지 못했다. 근데 되게 당연한건데.. 그냥 존나 빡대가리처럼 생각을 했던 것이다. 당연히 내가 필요한건 파일경로고.. 나는 여태 그냥 내가 작업중인 디렉토리에만 접근해서 생긴 일이었다.
당연히 main_telegram.py
에서 실행할땐 디렉토리가 ./Crawling
이고 크론은 우분투에서 작동하니까..ㅡㅡ 개짜증 이런걸 헷갈려하고 있음.
보통 파일경로나 뭐 디렉토리에 접근하려면 os
를 이용 많이하는데, pathlib
은 이 파일경로를 문자열이아닌 객체로 얻을 수 있게 해준다.
pathlib
모듈을 사용하면, 파일, 디렉토리(폴더)의 경로를 객체로써 조작하거나 처리할 수 있다. 이것또한 강사님이 알려주신..(갓사님)
내가 헤매니까 결국 코드 알려주심.. 감사합니다 오늘 숨넘어가서 죽을뻔햇어요
os.chdir(pathlib.Path(__file__).parent.absolute())
위 코드를 보면,
__file__
: 현재 파일
Path
: 현재 파일의 경로를 객체화 하여 표현
parent
:
import pathlib
path = pathlib.Path('/user/path/to/file')
print(path) # /user/path/to/file
print(path.parent) # /user/path/to
위의 결과로 .parent
는 현재 파일이 존재하는 곳의 상위 디렉토리까지만 표현을 해주는.. 말그대로 부모 디렉토리. (이 파일을 품고있는 디렉토리)
absolute
: 절대경로
정리를 하자면 현재파일의 경로를 절대경로로 나타내어 준 것이다.
크론은 항상 /home/ubuntu
에서 실행해주기 때문에 크론을 실행할 때 상대경로를 그냥 ./telegram_config
이렇게 해버리면 /home/ubuntu/telegram_config
의 파일을 읽으니 당연히 디렉토리에 파일이 없다는 오류가 뜨는 것..
그래서 저렇게 현재 파일의 경로를 절대경로로 나타내준 곳으로 디렉토리를 바꿔주고 그냥 telegram_config
를 해주면 된다.
그냥 내 컴퓨터에서만 실행하는거면 그 파일의 절대경로를 복사해서 붙여주면 되지만 다른 사람의 컴퓨터에서 실행한다고 했을때 그러면 오류가 날것이니까! 저렇게 경로를 지정해주는 것이다!!
오늘도 하나 배웠다..흑흑