Skip to content

Commit 9b01d11

Browse files
authored
Merge pull request #187 from BCSDLab/refactor/runsh
refactor: run.sh 스크립트 구조 개선 및 가상환경 처리 로직 강화
2 parents 868b198 + b366ef5 commit 9b01d11

1 file changed

Lines changed: 68 additions & 32 deletions

File tree

run.sh

Lines changed: 68 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,5 @@
11
#!/bin/bash
22

3-
# 현재 작업 디렉토리를 BASE_DIR로 설정
4-
BASE_DIR=$(pwd)
5-
6-
while getopts "n:d:h" opt; do
7-
case $opt in
8-
n) FILE_NAME="$OPTARG"
9-
;;
10-
d) BASE_DIR="$OPTARG"
11-
;;
12-
h) usage
13-
;;
14-
\?) usage
15-
;;
16-
esac
17-
done
18-
19-
# 로그 디렉토리
20-
LOG_DIR="$BASE_DIR/logs"
21-
22-
# 가상 환경 경로
23-
VENV_DIR="$BASE_DIR/myenv"
24-
253
# 도움말 메시지 함수
264
usage() {
275
echo "사용방법: $0 -n <file_name> -d <directory_path>"
@@ -31,29 +9,87 @@ usage() {
319
exit 1
3210
}
3311

12+
# 현재 작업 디렉토리를 BASE_DIR로 설정
13+
BASE_DIR="$(pwd)"
14+
15+
# run.sh 위치
16+
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
17+
18+
while getopts "n:d:h" opt; do
19+
case $opt in
20+
n) FILE_NAME="$OPTARG" ;;
21+
d) BASE_DIR="$OPTARG" ;;
22+
h) usage ;;
23+
\?) usage ;;
24+
esac
25+
done
26+
3427
# 인자가 하나도 없을 경우 도움말 출력
3528
if [ $# -eq 0 ]; then
3629
usage
3730
fi
3831

3932
# 파일 이름 인자 확인
4033
if [ -z "$FILE_NAME" ]; then
41-
useage
34+
usage
35+
fi
36+
37+
# 로그 디렉토리
38+
LOG_DIR="$ROOT_DIR/logs"
39+
FULL_LOG_DIR="$LOG_DIR/$FILE_NAME"
40+
LOG_FILE="$FULL_LOG_DIR/$FILE_NAME.out"
41+
42+
# 로그 디렉토리 생성
43+
mkdir -p "$FULL_LOG_DIR"
44+
45+
# 가상 환경 경로
46+
VENV_DIR="$ROOT_DIR/myenv"
47+
48+
# 가상 환경 Python 실행 파일 경로
49+
VENV_PYTHON="$VENV_DIR/bin/python"
50+
51+
# python3 실행 파일 경로 확인
52+
PYTHON3_BIN="$(command -v python3)"
53+
54+
# python3 명령 확인
55+
if [ -z "$PYTHON3_BIN" ]; then
56+
echo "python3 명령을 찾을 수 없습니다." >> "$LOG_FILE"
57+
exit 1
4258
fi
4359

4460
# 가상 환경 확인 및 생성
45-
if [ ! -d "$VENV_DIR" ]; then
46-
echo "Python 가상환경이 없습니다!"
47-
echo "가상환경을 생성합니다..."
48-
python3 -m venv $VENV_DIR >> $FULL_LOG_DIR/$FILE_NAME.out 2>&1
61+
if [ ! -x "$VENV_PYTHON" ]; then
62+
echo "Python 가상환경이 없습니다!" >> "$LOG_FILE"
63+
echo "가상환경을 생성합니다..." >> "$LOG_FILE"
64+
"$PYTHON3_BIN" -m venv "$VENV_DIR" >> "$LOG_FILE" 2>&1
4965
fi
5066

51-
# 로그 디렉토리 생성
52-
FULL_LOG_DIR="$LOG_DIR/$FILE_NAME"
53-
mkdir -p $FULL_LOG_DIR
67+
# 가상 환경 생성 결과 확인
68+
if [ ! -x "$VENV_PYTHON" ]; then
69+
echo "가상환경 생성에 실패했습니다. $VENV_PYTHON 파일이 존재하지 않습니다." >> "$LOG_FILE"
70+
exit 1
71+
fi
72+
73+
# requirements.txt 파일 존재 확인
74+
if [ ! -f "$ROOT_DIR/requirements.txt" ]; then
75+
echo "requirements.txt 파일이 존재하지 않습니다: $ROOT_DIR/requirements.txt" >> "$LOG_FILE"
76+
exit 1
77+
fi
78+
79+
# 실행할 python 파일 존재 확인
80+
if [ ! -f "$BASE_DIR/$FILE_NAME.py" ]; then
81+
echo "실행할 python 파일이 존재하지 않습니다: $BASE_DIR/$FILE_NAME.py" >> "$LOG_FILE"
82+
exit 1
83+
fi
5484

5585
# 필요한 패키지 설치
56-
pip3 install -r $BASE_DIR/requirements.txt >> $FULL_LOG_DIR/$FILE_NAME.out 2>&1
86+
"$VENV_PYTHON" -m pip install -r "$ROOT_DIR/requirements.txt" >> "$LOG_FILE" 2>&1 || {
87+
echo "패키지 설치에 실패했습니다." >> "$LOG_FILE"
88+
exit 1
89+
}
5790

5891
# 파이썬 스크립트 실행
59-
python3 $BASE_DIR/$FILE_NAME.py >> $FULL_LOG_DIR/$FILE_NAME.out 2>&1
92+
"$VENV_PYTHON" "$BASE_DIR/$FILE_NAME.py" >> "$LOG_FILE" 2>&1 || {
93+
echo "파이썬 스크립트 실행에 실패했습니다." >> "$LOG_FILE"
94+
exit 1
95+
}

0 commit comments

Comments
 (0)