현재 진행하고 있는 데이터 수집이 파이썬 파일을 정기적으로 실행 시켜줘야 한다
관련해서 알아보던 중 크론탭이란 것을 알게 되었고...
열심히 공부해보자는 마음으로 벨로그를 켰다🎯
또 얼마나 엄청난 것일지...!(아님)
리눅스 및 유닉스 계열 운영 체제에서 주기적으로 명령어나 스크립트를 자동으로 실행하기 위해 사용하는 도구
자동화: 백업, 로그 정리 등 반복적으로 수행해야 하는 작업 자동화
효율성: 정해진 시간에 자동으로 작업 실행 -> 다른 일을 할 수 있음
신뢰성: 정기적으로 실행되는 작업은 수동 실행보다 오류가 적고, 효율적인 시스템 자원의 관리 가능
정확한 주기 실행: 설정한 주기에 맞춰 정확하게 작업 실행
리소스 절약: 불필요한 수동 작업을 줄여 시스템 리소스 절약
유연성: 다양한 주기 설정 → 필요에 따라 작업의 실행 주기 쉽게 조정 가능
모니터링: 실행 결과를 로그 파일에 기록하여 작업 성공 여부 확인
쉘 스크립트 파일로, 리눅스 및 유닉스 계열 운영 체제에서 사용되는 스크립트
즉, sh 파일은 명령어를 순차적으로 실행하기 위해 작성된 텍스트 파일이다.
주로 시스템 관리, 자동화 작업, 프로그램 실행 등의 목적으로 사용된다.
1) .sh 파일의 구성
2) 예시
#!/bin/bash
#현재 날짜, 시간 출력
echo "$(date '+%Y-%m-%d %H:%M:%S') - Executing Python script."
#!/bin/bash는 쉘 스크립트의 첫 번째 줄에 위치하는 셰뱅(shebang) 으로,
이 스크립트가 어떤 인터프리터로 실행될지 지정하는 역할 !
1) #! (셰뱅)
2) /bin/bash
3) .sh 파일 실행 방법
chmod +x run.sh
./run.sh
4) 사용 용도
1) Crontab 파일 열기
터미널에서 crontab -e
명령어 입력
2) 작업 추가
Crontab 파일에 주기적으로 실행할 작업 추가
* * * * * /User/user/run.sh
첫 번째 *: 분 (0-59)
두 번째 *: 시간 (0-23)
세 번째 *: 일 (1-31)
네 번째 *: 월 (1-12)
다섯 번째 *: 요일 (0-7) (0과 7은 일요일)
예를 들어, 매일 오전 2시에 run.sh 스크립트를 실행하고 싶다면:
0 2 * * * /User/user/run.sh
3) Crontab 파일 저장
파일을 수정한 후 저장하고 종료하면, 설정된 작업이 주기적으로 실행된다 !
ctrl + o 과 엔터 →저장
ctrl + x → 창 나오기
뭔소린가 싶지만 그런 경우가 있다
명령어로 직접 sh 파일을 실행하면 되지만 crontab에 작성한 내용은 실행이 안되는 경우, 거진 "실행 권한" 문제다
Crontab에서 스크립트를 실행하려면 그 스크립트 파일이 실행 가능한 상태여야 한다.
chmod +x /user/workspace/run.sh
이렇게 sh 파일에 권한을 부여해야 정상적으로 동작하게 된다 !!
아래 명령어로 해당 파일의 권한 여부를 확인할 수 있다😎
ls -l /user/workspace/run.sh
4) Crontab 기본 명령어
crontab -e
crontab -l
crontab -r
crontab /path/to/file
crontab -i -r /path/to/file
5) crontab 특수문자
콤마(,): 여러 값 지정 (1분, 2분, 3분)
대시(-): 범위 지정 (1분부터 5분까지)
별표(*): 모든 값 (매 분, 매 시간 등)
슬래시(/): 주기 지정 (매 5분마다)
6) 2>&1
리눅스/유닉스 환경에서 표준 오류(stderr)를 표준 출력(stdout) 으로 리다이렉션하는 명령
리눅스에서는 명령을 실행할 때 기본적으로 세 가지 스트림을 사용하는데,
2>&1는 표준 오류(2번 디스크립터)를 표준 출력(1번 디스크립터) 으로 리다이렉션하는 역할을 한다.
즉, 표준 출력과 표준 오류를 같은 곳으로 보낸다 !
나는 이런식으로 sh 파일을 작성하고
#!/bin/bash
LOG_FILE="/user/workspace/log/app.log"
# Python 스크립트 실행 시간 기록
echo "$(date '+%Y-%m-%d %H:%M:%S') - Executing Python script." >> $LOG_FILE
# Python 스크립트 실행
/user/conda/envs/analysis/bin/python3 /user/workspace/test.py >> $LOG_FILE 2>&1
# Python 스크립트 실행 완료 기록
echo "$(date '+%Y-%m-%d %H:%M:%S') - Python script execution finished." >> LOG_FILE
crontab -e
을 입력해서
# analysis
0 4 * * * /user/workspace/run.sh
ctrl + o 과 엔터를 눌러 저장하고
ctrl + x 빠져나왔다
다행히(?) 잘 찍히는 로그😗
실행 중인지 알고 싶으면
ps aux | grep python
이 명령어를 입력하면 된다.
내가 python 파일을 실행 중이니 실행 중인 모든 py 파일을 보여준다
이렇게 실행 중인 파일은
kill -9 2418152
명령어를 입력하여 강제 중지 시킬 수 있다
/
/
오늘도 엄청 열심히 공부한 리눅스
생소한 환경이라 처음엔 어버버했지만
보면 볼수록 재미있다. 내가 친 명령어대로 쭉쭉 내뱉는게🤭
아직 정말 정말 쌩 기초적인 내용이지만
리눅스는 좀 더 열심히 공부해보자 !