시놀로지 도커 파이썬 스크립트 관리자 v0.1.2.2 – 리눅스도 가능

 

v0.1.2.2 수정 사항 – projects 폴더 생성 방식 변경 compose 파일 수정 필요

 

image.png

 우선 간단하게 스케쥴러 기능을 추가해서 만들어 봤습니다

 

여러 파이썬 스크립트를 컨테이너로 실행해서 관리할 수 있는 컨테이너 입니다

프로젝트 이름과 메인 코드와 의존성 코드를 넣고 프로젝트 생성 후 실행 하면 임시 컨테이너가 실행되는 방식 입니다

image.png

웹UI에서 입력하는 메인 코드 외에 추가 파일들이 코드 실행에 필요하다면

projects 폴더 하위에 생성되는 각각의 프로젝트 폴더에 넣어 주시면 됩니다

  

image.png

중지 된 각 프로젝트 이름을 클릭 하면 수정이 가능 하고요

 

image.png

실행을 하게 되면 업타임이 표시되고 실시간 로그 메뉴를 선택 할 수 있습니다

 

 

image.png

자료실 – 이정도면컴맹인듯 님의 코드 실행 화면

컨테이너용으로 수정 된 코드
import math
import os

def haversine(lat1, lon1, lat2, lon2):
    R = 6371  # 지구 반지름 (km)

    # 라디안으로 변환
    phi1 = math.radians(lat1)
    phi2 = math.radians(lat2)
    delta_phi = math.radians(lat2 - lat1)
    delta_lambda = math.radians(lon2 - lon1)

    # 하버사인 공식
    a = math.sin(delta_phi / 2) ** 2 + math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))

    distance_km = R * c
    return distance_km

def parse_coordinates(input_str):
    try:
        lat_str, lon_str = input_str.strip().split(",")
        lat = float(lat_str.strip())
        lon = float(lon_str.strip())
        return lat, lon
    except Exception:
        raise ValueError("좌표는 '위도, 경도' 형식으로 입력해야 합니다. 예: 37.269557, 127.020554")

def show_korea_range_info():
    print("\n" + "="*40)
    print("대한민국 대부분 지역의 GPS 좌표 범위:")
    print(" - 위도: 33 ~ 39")
    print(" - 경도: 124 ~ 132")
    print("="*40 + "\n")

def main():
    while True:
        # os.system('cls' if os.name == 'nt' else 'clear')  # <-- 이 부분을 주석 처리하거나 삭제합니다.
        show_korea_range_info()

        try:
            print("좌표1 입력 (예: 37.269557, 127.020554)")
            coord1_input = input("좌표1 (위도, 경도): ")
            lat1, lon1 = parse_coordinates(coord1_input)

            print("좌표2 입력 (예: 35.123456, 129.123456)")
            coord2_input = input("좌표2 (위도, 경도): ")
            lat2, lon2 = parse_coordinates(coord2_input)

            distance_km = haversine(lat1, lon1, lat2, lon2)
            distance_miles = distance_km * 0.621371

            print(f"\n좌표 간 직선거리: {distance_km:.2f} km / {distance_miles:.2f} miles\n")

            input("처음으로 돌아가려면 아무 키나 누르세요...")

        except ValueError as e:
            print(f"\n입력 오류: {e}\n")
            input("다시 시도하려면 아무 키나 누르세요...")
        except EOFError:
            # 인터랙티브 세션이 예기치 않게 종료될 때 루프를 중단합니다.
            print("\n입력 스트림이 닫혔습니다. 프로그램을 종료합니다.")
            break

if __name__ == "__main__":
    main()

 

실시간 로그는 별도의 창에서 표시 됩니다

 

v0.1.2

 이제 실시간 로그 창에서 키 입력이 가능 합니다

자동 스크립트 뿐 만 아니라 입력이 필요한 파이썬 코드도 실행 가능 합니다

 

v0.1.2.1 

러너 컨테이너가 실행 되는 동안 로그 기록 유지 기능 추가
실시간 로그 창을 통해 출력 된 내용만 확인 가능합니다
전체 로그는 러너 컨테이너의 로그를 통해 확인 하세요

 

입력 기능을 추가 하면서 출력 데이터를 버퍼 없이 보기위해 구현하다보니

로그 데이터의 앞부분이 조금 잘리는 문제가 있습니다

전체 로그는 러너 컨테이너의 로그를 확인 하세요

 

이게 그냥 로그만 실시간으로 가져오면 간단한데 입력이 안되고

TTY를 그냥 사용하면 입력은 잘 되는데 한글이 깨지고

그래서 TTY파싱해서 어쩌고 저쩌고 하면서 입력은 다른 방식으로 해서 어떻게 만들긴 했는데

…뭐 그렇습니다 완벽하지는 않네요

단순 로그 출력과 상호작용이 가능한 터미널 기능을 선택 가능하게 만들어볼까 고민 중입니다

 

image.png

코드가 실행 되는 동안 컨테이너가 생성돼서 돌아갑니다

image.png

코드를 중지하면 컨테이너가 사라집니다

 

 

image.png

스케쥴 기능은 정해진 시간에 실행 하거나 시간 간격을 정해 반복 실행 가능 합니다

현재는 하루 한 번 혹은 시간 간격에 따라 설정 할 수 있습니다 나중에 요일 실행 기능을 추가할 예정 입니다

v0.1.2 에서는 요일 스케쥴 설정이 가능 합니다

 

image.png

간격은 분 단위로 설정 할 수 있습니다

 

image.png

image.png

매일 특정 시간마다 반복 설정이 가능 합니다

시계를 클릭하면 시간을 선택 할 수 있습니다

UI 뿐만 아니라 직접 입력도 가능 합니다

 

image.png

매주 특정 요일을 지정할 수도 있습니다

요일은 중복 선택 가능 합니다

 

 

image.png

docker/py-manager 폴더 생성

data 폴더 – 스케쥴 저장

projects 폴더 – 프로젝트 저장

위의 하위 폴더를 생성 합니다

 

version: '3.8'

services:
  py-manager:
    image: sruinz/py-manager:latest
    container_name: py-manager-app
    restart: unless-stopped
    
    ports:
      - "4841:4840" # 접속 포트 4841은 변경 가능
      
    volumes:
       # 프로젝트 폴더 마운트
      - ./projects:/app/projects
      # 스케쥴 DB를 저장할 data 폴더 마운트
      - ./data:/app/data 
      # Docker 제어를 위한 소켓 마운트
      - /var/run/docker.sock:/var/run/docker.sock
     # v0.11 파이썬 코드에서 접근 하려는 폴더를 추가
     #- /volume1/book:/volume1/book # ex) 책 파일을 정리하는 코드를 실행 하기 위해 추가
      
     environment:
      # v0.1.2.2 수정 프로젝트 경로 추가
      - HOST_BASE_PATH=/volume1/docker/py-manager/projects # 위에서 생성한 프로젝트 폴더 경로

컨테이너 매니저에서 프로젝트 생성 

위에서 만든 폴더 지정 

프로젝트 생성

웹 브라우저 나스아이피:4841로 접속

 

 

 

많이 부족하긴 하지만 써보실 분들은 사용 해보세요

 

오류나 불편한점 있으시면 댓글 주시면 됩니다

 

image.png

코드가 실행 되고 종료 됐을 때

정상 종료든 비정상 종료든 예기치 않게 중지 됨 오류가 표시 됩니다

이건 시놀 문제라 우회하는 게 쉽지 않네요

기능상 문제는 없습니다

 

 

리눅스에서도 사용 가능 합니다

image.png

image.png

proxmox lxc 도커 에서도 실행 잘 됩니다

포테이너 스택으로 설치 했는데 문제 없이 작동 하네요

version: '3.8'

services:
  py-manager:
    image: sruinz/py-manager:latest
    container_name: py-manager-app
    restart: unless-stopped
    
    ports:
      - "4841:4840" # 접속 포트 4841은 변경 가능
      
    volumes:
      # Proxmox LXC 컨테이너 내부의 절대 경로로 변경
      # /opt/py-manager-data/projects 폴더를 컨테이너의 /app/projects에 연결
      - /opt/py-manager-data/projects:/app/projects
      
      # 스케쥴 DB 데이터 폴더도 절대 경로로 변경
      - /opt/py-manager-data/data:/app/data 
      
      # Docker 소켓 마운트는 그대로 유지
      - /var/run/docker.sock:/var/run/docker.sock

     # v0.11 파이썬 코드에서 접근 하려는 폴더를 추가
     #- /opt/book:/opt/book # ex) 책 파일을 정리하는 코드를 실행 하기 위해 추가
      
    environment:
      # HOST_BASE_PATH 환경 변수도 LXC 컨테이너의 경로에 맞게 변경
      - HOST_BASE_PATH=/opt/py-manager-data/projects # v0.1.2.2 수정 프로젝트 경로 추가

 

mkdir -p /opt/py-manager-data/projects
mkdir -p /opt/py-manager-data/data

사용하시는 리눅스 환경에 따라 폴더 생성 하신 후 스택으로 생성 하시면 됩니다

 

 

 

0.1.1 업데이트 내용

  • 컨테이너 외부 파일 접근 기능 추가
  • 파이썬 코드가 접근 하려는 폴더를 관리자 컨테이너 compose.yml 파일에 마운트 후 빌드
- /volume1/book:/volume1/book # 책 파일을 정리하는 코드를 실행 하기 위해 추가

0.1.2 업데이트 내용

https://svrforum.com/nas/2460681

 

0.1.2.1 업데이트 내용

  • 러너 컨테이너가 실행 되는 동안 로그 기록 유지 기능 추가
  • 실시간 로그 창을 통해 출력 된 내용만 확인 가능합니다
  • 전체 로그는 러너 컨테이너의 로그를 통해 확인 하세요

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다