crontab
학원에서도 하루죙일 했는데....집 와서 또 하루죙일 했다....
$ cat pyproject.toml
[project.scripts]
ml-worker = 'mnist.worker:run'
$ cat ml-work-cronjob
* * * * * /usr/local/bin/ml-worker >> /var/log/worker.log 2>&1
ml-work-cronjob의 의미는
크론 태스크 설정을 매 분마다 /usr/local/bin/ml-worker 스크립트를 실행하고, 그 결과를 /var/log/worker.log 파일에 기록하도록 설정하는 것 이다.
먼저 이해가 안됐던 부분은 /usr/local/bin ,, /var/log,,, >> 갑자기 등장한 낯선 경로들
알아본 바로는 PDM 등 패키징 도구를 사용하여 프로젝트를 설치했을 때 자동 설치되는 경로라는 것 이다. 내가 지정한게 아니라 토믈 파일에서 ml-worker 명령어를 설정해주었고, 이 명령이 설치되는 기본 경로라는 뜻 이다. (이렇게 설명하는 게 맞는지 모르겠음ㅎㅎ;)
그리고 관련 로그가 /var/log/worker.log에 저장된다.
그리고 나는 이 프로그램을 도커를 통해 실행시키고 있다. 그래서 Dockerfile을 확인해보면 cron과 관련한 설치 명령을 넣은 것 이다.
$ cat Dockerfile
FROM python:3.11
WORKDIR /code
RUN apt update
RUN apt install -y cron
COPY ml-work-cronjob /etc/cron.d/ml-work-cronjob
RUN crontab /etc/cron.d/ml-work-cronjob
'
'
'
로그를 확인해보겠다. 먼저 도커 2개(프로그램, DB) 실행시키기.
그리고 도커에 접속해서 로그가 저장된 경로를 cat 을 통해 출력해보았다.
매 분 cron이 실행되는 로그를 확인할 수 있다.
$ docker exec -it m23 bash
root@17708102e7e8:/code# cat /var/log/worker.log
2024-09-24 22:20:01
2024-09-24 22:21:01, num
2024-09-24 22:22:02, num
2024-09-24 22:23:01, num
2024-09-24 22:24:01, num
2024-09-24 22:25:01, num
2024-09-24 22:26:01, num
2024-09-24 22:27:02, num
그리고 FastAPI를 통해 이미지를 업로드 했다면 라인 알람이 갈 것이다.
학원에서도 그렇고 집에서도 데이터베이스 서버 주소 관련해서 에러가 많이 발생했었다.
지금은 이해 완료요
각각의 사용자들이 AWS 서버 DB에 이미지를 업로드하는데, 아래와 같이 file_path가 지정되면 서로 다른 도커 컨테이너에서 접근이 불가능하다. 내 소유 컨테이너에서 다른 컨테이너가 만든 파일 경로에 접근이 가능해야하고, 반대로 다른 컨테이너도 내 컨테이너에서 만든 파일 경로에 접근이 가능해야한다.
+----------------------------------------------------------------------------+
| /home/centa/code/mnist/img/c5e4f008-f7ec-4e48-9fde-a8fdf2f91859.jpeg |
| /home/centa/code/mnist/img/f733030d-6236-4ed4-bd39-a789f0a16cc5.jpeg |
| /home/centa/code/mnist/img/1951703b-6666-46c5-b18f-5f36f7ab4040.jpeg |
| /home/hun/code/mnist/img/b9e49d9e-684b-4e73-82ba-785913ab156e.png |
| /home/young12/code/mnist/img/5747f8e8-a1cc-4b28-a2b3-c8816dbe972c.jpeg |
| /home/centa/code/mnist/img/d6e69b15-0a6e-4d07-b408-886b29c1c659.jpeg |
| /home/centa/code/mnist/img/c38dd045-dcc2-4d92-9c5a-ae75f478b7d8.jpeg |
| /home/centa/code/mnist/img/0229cd1d-8777-41de-bb4d-f99a7b39e311.jpeg |
어제 배웠던 -v 옵션을 통해 해결할 수 있다.
$ sudo docker run -d --name mnist23 \
-e LINE_NOTI_TOKEN=<!!!> \
-e DB_IP=172.17.0.1 -e DB_PORT=53306 \
-v /home/ubuntu/images:/home/ubuntu/images \
-e UPLOAD_DIR=/home/ubuntu/images/n23 \
-p 8023:8080 sooj1n/mnist:0.4.3
먼저 주피터 노트북을 설치해서 테스트(?)
import numpy as np
from PIL import Image
from keras.models import load_model
from tensorflow.keras.datasets import mnist
import os
# 모델 로드
model = load_model('mnist240924.keras') # 학습된 모델 파일 경로
# 사용자 이미지 불러오기 및 전처리
def preprocess_image(image_path):
img = Image.open(image_path).convert('L') # 흑백 이미지로 변환
img = img.resize((28, 28)) # 크기 조정
# 흑백 반전
# img = 255 - np.array(img) # 흑백 반전
img = np.array(img)
img = img.reshape(1, 28, 28, 1) # 모델 입력 형태에 맞게 변형
img = img / 255.0 # 정규화
return img
# 예측
def predict_digit(image_path):
img = preprocess_image(image_path)
prediction = model.predict(img)
digit = np.argmax(prediction)
return digit
(train_images, train_lables), (test_images, test_lables) = mnist.load_data()
save_dir = 'train_img'
os.makedirs(save_dir, exist_ok=True)
def save_images(images, labels):
for i, (imga, label) in enumerate(zip(images, labels)):
img = Image.fromarray(imga)
name = f'{label}_{i}.png'
img.save(os.path.join(save_dir,name))
save_images(train_images, train_lables)
'playdata > daily' 카테고리의 다른 글
12주차 : Day 4 (9/26) (0) | 2024.09.30 |
---|---|
12주차 : Day 3 (9/25) (1) | 2024.09.30 |
12주차 : Day 1 (9/23) (2) | 2024.09.24 |
10주차 : Day 4,5 (9/12,13) (3) | 2024.09.23 |
10주차 : Day 2,3 (9/10,11) (0) | 2024.09.23 |