블로그에 포스팅도 했었지만 일전에 시계열 데이터를 활용해 예측하는 리포트를 만든 적이 있습니다.
딥러닝을 통한 변수별 ETF 가격 예측 비교
작년 2021년 캡스톤 디자인 수업을 준비하면서 만들었던 리포트 입니다. 처음 만들어 본 리포트여서 많이 부족합니다. 재밌게 보시고 피드백 부탁드립니다! 20년부터 ETF 종목이 큰 관심을 받기 시
6058ah.tistory.com
그 때는 정적으로 데이터를 불러왔지만 새로운 데이터를 모으기 위해서는 정적 데이터 수집을 한 번 더 해야하만 했습니다. 이번에 우분투를 기반으로 데이터 처리 등을 공부 하면서 동적으로 데이터를 받아오는 방법이 어떤 것이 있을까 알아보다 crontab이란 것을 알게 되어 이에 대해 알아보려 합니다.
crontab이란 서버 스스로 정해둔 명령을 일정 기간마다 실행하도록 하는 것입니다. 스케쥴러라고 보면 쉽습니다.
기본적으로 /etc/crontab 파일 또는 crontab -e 명령어를 통해 스케줄을 등록할 수 있습니다.
먼저 관리자 권한으로 접근하고 cat 명령어를 사용하여 crontab 파일을 확인합니다.
sudo -i
cat /etc/crontab
수행할 명령어는 다음과 같습니다.
* * * * * 수행할 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
│ │ │ └─ 월 (1 - 12)
│ │ └─일 (1 - 31)
│ └─ 시 (0 - 23)
└─ 분 (0 - 59)
* * * * * /root/backup.sh
→매분, 매시간, 매일, 매월, 매일, 즉 1분마다 /root/backup.sh를 실행
0 4 * * * /root/backup.sh
→0분, 4시, 매일, 매월, 매일, 즉 매일 4시에 /root/backup.sh를 실행
0 4 * * 1-5 /root/backup.sh
→0분, 4시, 매일, 매월, 월요일부터 금요일, 즉 평일 4시에 /root/backup.sh를 실행
*/10 4 * * * /root/backup.sh
→10분 간격, 4시, 매일, 매월, 매일, 즉 매일 4시, 4시 10분, 4시 20분, 4시 30분, 4시 40분, 4시 50분에 /root/backup.sh를 실행
0 */6 * * * /root/backup.sh
→6시간마다 /root/backup.sh를 실행
0 8 * * 1-5 /root/weekday.sh
→평일(월요일~금요일) 08:00 에 /root/weekday.sh 실행
0 8 * * 0,6 /root/weekend.sh
→ 주말(일요일, 토요일) 08:00 에 /root/weekend.sh 실행
0 5 * * * /sbin/shutdown -r now
→ 매일 새벽 5시에 재부팅하기
위 예시의 참고: https://kibua20.tistory.com/89 [모바일 SW 개발자가 운영하는 블로그]
그럼 이 crontab을 이용해서 1분마다 현재 시간을 기록하는 파이썬 파일을 돌려보겠습니다.
from datetime import datetime
now = datetime.now()
print("current time is", now)
만약 파이썬 파일을 주기적으로 실행하려면 다음과 같이 진행하면 됩니다.
주피터 노트북으로 파일을 만든 경우 해당 파일 디렉토리에 가서 ipynb를 py로 바꾸는 작업을 합니다.
jupyter nbconvert --to python file_name.ipnyb
* * * * * /usr/bin/python /Users/(이름)/Desktop/test.py
#[시간 설정] [파이썬이 설치된 절대경로] [실행할 파이썬의 절대경로]
***** /home/ubuntu/anaconda3/bin/python /home/ubnutu/project/cron_test.py >> /home/ubuntu/project/test.log
> 는 덮어쓰기 이고,
>> 는 append 입니다.
또한, * 사이 사이에 띄어쓰기가 들어가야 합니다.
실제 로그가 이렇게 남게됩니다.
로그 확인을 위해서는 다음의 코드를 작성하면 됩니다.
cat /var/log/syslog | grep CRON
크론탭을 삭제하려면 다음의 코드를 사용합니다.
crontab -r
crontab -l
crontab -l 을 입력했을 때 'no crontab for ubuntu'가 나오면 정상적으로 작동된 것을 의미합니다.