본문 바로가기
프로그램 (PHP,Python)

파이썬(Python) 스크립트 자동실행 스케쥴 관리 (지정시간, 매시간, 매일)

by 날으는물고기 2023. 10. 18.

파이썬(Python) 스크립트 자동실행 스케쥴 관리 (지정시간, 매시간, 매일)

주기별로 원하는 시간(초,분,시간,요일,일,월)마다 Python 스크립트를 자동으로 실행(반복)하는 코드를 작성하려면 schedule 라이브러리를 사용할 수 있습니다. 이 라이브러리를 사용하면 주기별로 작업을 예약하고 실행할 수 있습니다.

Examples - Python job scheduling for humans.

먼저 schedule 라이브러리를 설치해야 합니다.

pip install schedule

주기와 실행할 Python 스크립트 파일 리스트를 등록하는 방법입니다. 아래 코드에서는 job_list라는 리스트를 사용하여 주기와 실행할 스크립트를 등록합니다. 각 항목은 튜플로 구성되며, 첫 번째 요소는 주기를 나타내는 문자열이고, 두 번째 요소는 실행할 Python 스크립트의 경로입니다.

import schedule
import time
import subprocess

# 주기와 실행할 스크립트 경로를 등록합니다.
job_list = [
    ("every 1 minute", "/path/to/script1.py"),
    ("every 2 hours", "/path/to/script2.py"),
    ("every day at 3:00", "/path/to/script3.py"),
]

# 등록된 작업을 스케줄에 추가합니다.
for job in job_list:
    schedule.every().minute.at(job[0]).do(subprocess.run, ["python", job[1]])

# 주기적으로 작업을 실행합니다.
while True:
    schedule.run_pending()
    time.sleep(1)

이 코드는 주기별로 등록된 스크립트를 실행합니다. schedule.every().minute.at(job[0]).do(subprocess.run, ["python", job[1]]) 코드는 주기와 스크립트를 실행하는 방법을 정의합니다.

 

주기적으로 작업을 실행하기 위해 while True 루프를 사용하며, schedule.run_pending()은 아직 실행되지 않은 작업이 있는지 확인하고 실행합니다. 코드 내에서 주기를 지정하는 부분에서 "every 1 minute"과 같은 문자열을 적절히 수정하여 원하는 주기를 설정할 수 있습니다.

 

이 코드를 사용하면 등록된 주기에 따라 Python 스크립트가 실행됩니다. 각 스크립트는 별도의 프로세스로 실행되므로, 병렬로 여러 작업을 수행할 수 있습니다.

 

schedule 라이브러리를 사용하여 작업을 주기적으로 예약할 때, 주기를 지정하는 방법은 다음과 같습니다. 주기는 schedule.every() 메서드를 사용하여 정의하며, 다양한 시간 간격을 지정할 수 있습니다.

 

주기를 정의하는 구문은 schedule.every().<interval> 형식을 따르며, <interval> 부분에는 다음과 같은 시간 간격을 지정할 수 있습니다.

  1. 분 단위: .minute
  2. 시간 단위: .hour
  3. 일 단위: .day
  4. 주 단위: .week
  5. 월 단위: .month

예를 들어, 매 30분마다 실행하려면 schedule.every(30).minutes를 사용하고, 매 시간 정각에 실행하려면 schedule.every().hour를 사용합니다. 주기적인 작업을 정의한 후에 .at() 메서드를 사용하여 작업이 언제 실행되어야 하는지 세부적으로 지정할 수 있습니다.

 

다음은 주기를 더 자세히 설명하는 예제 코드입니다.

import schedule
import time

# 30분마다 실행
schedule.every(30).minutes.do(job_function)

# 1시간마다 실행
schedule.every().hour.do(job_function)

# 매일 9시 30분에 실행
schedule.every().day.at("09:30").do(job_function)

# 매주 월요일 오전 10시에 실행
schedule.every().monday.at("10:00").do(job_function)

# 매월 1일에 실행
schedule.every().month.at("00:00").do(job_function)

job_function은 실행할 작업을 나타내며, 주기적으로 실행하려는 작업을 이 함수로 대체하면 됩니다.

 

이러한 주기를 사용하면 schedule 라이브러리를 통해 작업을 예약하고 주기적으로 실행할 수 있습니다.

아래는 schedule 라이브러리를 사용하여 다양한 유형의 자동화 작업을 수행하는 코드 예제와 설명입니다.

import schedule
import time

# 실행할 작업 함수 정의
def job():
    print("안녕하세요...")

# 1. 간격별 작업 예약
# 3초마다 job 실행
schedule.every(3).seconds.do(job)

# 3분마다 job 실행
schedule.every(3).minutes.do(job)

# 3시간마다 job 실행
schedule.every(3).hours.do(job)

# 3일마다 job 실행
schedule.every(3).days.do(job)

# 3주마다 job 실행
schedule.every(3).weeks.do(job)

# 2. 특정 시각에 작업 예약
# 매분 23초에 job 실행
schedule.every().minute.at(":23").do(job)

# 매시간 42분에 작업 실행
schedule.every().hour.at(":42").do(job)

# 5시간 20분 30초마다 작업 실행
schedule.every(5).hours.at("20:30").do(job)

# 3. 특정 날짜 및 시각에 작업 예약
# 매일 10:30에 job 실행
schedule.every().day.at("10:30").do(job)

# 매일 10:30:42에 job 실행
schedule.every().day.at("10:30:42").do(job)

# 4. 주 중 특정 요일에 작업 예약
# 매주 월요일에 job 실행
schedule.every().monday.do(job)

# 매주 수요일 13:15에 job 실행
schedule.every().wednesday.at("13:15").do(job)

# 주기적으로 작업을 실행하는 무한 루프
while True:
    schedule.run_pending()  # 예약된 작업을 실행
    time.sleep(1)  # 1초 대기

# 위의 코드를 실행하면 지정된 주기에 따라 작업 함수인 job()이 실행됩니다.

위의 코드는 다양한 주기와 시간에 작업을 예약하는 예제를 제공하며, 필요에 따라 주기와 시간을 조절하여 사용할 수 있습니다. 코드의 주석에 작업을 예약하는 방법과 예제가 자세히 설명되어 있으므로 원하는 스케줄에 맞게 수정하여 사용하실 수 있습니다.

 

참고 : https://schedule.readthedocs.io/en/stable/

Jupyter Notebook을 예약하는 방법

 

How To Schedule a Jupyter Notebook | The Datalore Blog

Schedule Jupyter notebooks with just a few clicks. Specify run intervals from the interface or use the cron string to configure a schedule.

blog.jetbrains.com

 

728x90

댓글