')">

인공지능 모형 만들기

자동 실행

Posted by Jong-June Jeon on July 27, 2024

파이썬 파일의 주기적인 자동 실행

우분투에서 특정 시간에 파이썬 파일을 실행하려면, cron을 사용하여 작업을 예약할 수 있습니다. cron은 아래의 crontab 명령을 이용하여 작업을 편집할 수 있습니다. 가상환경을 사용하지 않고 파이썬 파일을 실행을 하는 경우는 시간, 간단히 파이썬 경로, 파일 경로를 명시하면 됩니다. 먼저 crontab -e 로 편집기를 선택하여 crontab을 수정합니다.

 # bash 
crontab -e

예를 들어 crontab 에디터에 다음과 같이 입력할 수 있습니다. (에디터로 파일 열고 가장 아래쪽에 입력합니다.) 각 필드는 다음을 나타냅니다:
- 첫 번째 필드: 분 (0-59)
-두 번째 필드: 시간 (0-23)
- 세 번째 필드: 일 (1-31)
- 네 번째 필드: 월 (1-12)
- 다섯 번째 필드: 요일 (0-7, 0 또는 7은 일요일)
- 마지막 필드: 실행할 명령 (간단히 파이썬 경로, 파일 경로)

 # crontab editor
0 3 * * * /usr/bin/python3 /myscript.py

위 내용은 오전 3시에 매일 python 으로 myscript.py 를 실행하는 명령입니다.

cron 의 설정을 확인은 아래 코드를 이용합니다.

 # bash
crontab -l

cron 의 실행결과는 아래코드로 확인합니다. cron 이 실행시간과 실행 명령을 확인할 수 있습니다.

 # bash
grep CRON /var/log/syslog

cron 의 상태를 확인해봅시다.

# bash
systemctl status cron

cron 의 실행결과 결과 파이썬 출력 및 오류를 기록하려면 파일 경로를 수정하여 아래코드를 이용해보세요.

 # crontab editor
0 3 * * *  /usr/bin/python3 /script.py >> /myscript.log 2>&1

참고로 >>, >는 쉘 스크립터에서 사용하는 리다이렉션 연산자입니다. 프로그램을 실행시킬때 모니터로 확인할 수 있는 표준출력과 표준에러를 특정 파일로 쓸 때 사용합니다. 위 명령의 의미는 '/usr/bin/python3 /script.py'의 표준출력을 모니터에 보여주는 것이 아니라 '/myscript.log'으로 덧붙여쓰고 (>>) 실행시 발생하는 표준오류(stderr 이며 2로 표시)를 File descriptor 1에 (&1) 덮어쓰라(>)는 것입니다.

'/script.py >>' 는 사실 '/script.py 1>>' 로 쓸 수 있으며 stdout 이 생략된 것입니다. >, >> 기호의 오른쪽에 있는 File descriptor 1 (&1)은 표준출력을 나타내는 파일입니다. >>, > 오른쪽에 File descriptor를 사용할 때는 반드시 &표시를 붙여주어야 합니다. 앞서 '/script.py >> /myscript.log' 에 의해 File descriptor 1가 '/dev/stdout' 가 아니라 '/myscript.log'로 되어 있기 때문에 script.py 를 실행하면서 확인할 수 있는 stdout 와 stderr를 모두 myscript.log에 저장할 수 있습니다.

요약하자면 '/usr/bin/python3 /script.py >> /myscript.log 2>&1'는 'script.py' 실행시 발생하는 출력과 오류를 myscript.log 에 저장하는 것입니다.

가상환경 위에서 cron 의 이용

가상환경에서 파이썬 파일을 실행하기 위해서 sh 파일을 이용합니다. 아래는 sh 파일의 예시입니다.

# (실행) bash
#!/bin/bash
source ~/miniconda3/etc/profile.d/conda.sh
conda activate myenv
python /script.py
conda deactivate

- 첫번째 줄은 #! (shebang 이라 부름)으로 시작합니다. 스크립트 파일이 어떤 인터프리터로 실행될지를 명시합니다. 여기서는 /bin/bash 를 사용합니다.
- 두번째 줄 부터 네번째 줄은 conda 활성화, 파일 실행, conda 비활성화입니다.

cron 을 이용해서 sh를 실행할 때 파이썬 파일 내에 파일 경로를 절대 경로로 변경해주는 것이 안전합니다.

다음으로 작성한 sh 파일에 chmod +x로 실행권한을 부여합니다.

# (실행) bash
chmod +x myscript.sh

마지막으로 crontab -e 를 아래와 같이 편집합니다 (예시).

 # crontab editor
0 3 * * *  /myscript.sh >> /myscript.log 2>&1