Files
youtube-dl/gommi_mac.sh

102 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# pyenv 초기화 (Warp/iTerm 등 비-인터랙티브 셸에서도 작동하도록)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv &> /dev/null; then
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" 2>/dev/null
fi
# Python 3.14 + gevent fork 경고 억제
export GEVENT_NOWAITPID=1
export PYTHONWARNINGS="ignore::DeprecationWarning"
# Ctrl+C (SIGINT) 한 번에 종료되도록 설정
cleanup() {
echo ""
echo "Stopping FlaskFarm..."
# Python 프로세스 종료
if [ -n "$PYTHON_PID" ]; then
kill -TERM $PYTHON_PID 2>/dev/null
sleep 0.5
kill -9 $PYTHON_PID 2>/dev/null
fi
# 모든 자식 프로세스 종료
pkill -P $$ 2>/dev/null
exit 0
}
trap cleanup SIGINT SIGTERM
CONFIGFILE="data/config_mac.yaml"
COUNT=0
# 🌐 Camoufox 브라우저 캐시 경로 설정 및 유지
# macOS에서는 /Users/yommi/Library/Caches/camoufox가 기본값이나, 프로젝트 data 폴더로 강제 리다이렉션
CAMOUFOX_DEFAULT_DIR="$HOME/Library/Caches/camoufox"
CAMOUFOX_PERSISTENT_DIR="$(pwd)/data/.camoufox"
# 심볼릭 링크를 통해 data 폴더와 동기화
if [ ! -L "$CAMOUFOX_DEFAULT_DIR" ]; then
echo "Configuring Camoufox persistence link..."
mkdir -p "$CAMOUFOX_PERSISTENT_DIR"
if [ -d "$CAMOUFOX_DEFAULT_DIR" ] && [ ! -L "$CAMOUFOX_DEFAULT_DIR" ]; then
cp -R "$CAMOUFOX_DEFAULT_DIR/" "$CAMOUFOX_PERSISTENT_DIR/" 2>/dev/null
rm -rf "$CAMOUFOX_DEFAULT_DIR"
fi
mkdir -p "$(dirname "$CAMOUFOX_DEFAULT_DIR")"
ln -s "$CAMOUFOX_PERSISTENT_DIR" "$CAMOUFOX_DEFAULT_DIR"
fi
# 🔧 서버 시작 전에 플러그인 업데이트 및 브라우저 확인
update_plugins() {
# Camoufox 브라우저 체크 (실제 설치된 폴더 확인)
if [ ! -d "$CAMOUFOX_DEFAULT_DIR/Camoufox.app" ]; then
echo "Fetching Camoufox binaries to $CAMOUFOX_PERSISTENT_DIR..."
camoufox fetch
fi
PLUGINS_DIR="data/plugins"
if [ -d "$PLUGINS_DIR" ]; then
for dir in "$PLUGINS_DIR"/*/; do
if [ -d "$dir/.git" ]; then
echo "Updating plugin: $dir"
git -C "$dir" reset --hard HEAD 2>/dev/null
git -C "$dir" pull 2>/dev/null & # 병렬 실행
fi
done
wait # 모든 git pull 완료 대기
fi
}
# 첫 실행 시 또는 --update 옵션일 때만
if [ "$COUNT" = "0" ]; then
update_plugins
fi
while true;
do
echo "------------------------------------------------"
echo "Starting FlaskFarm Python Process (COUNT: ${COUNT})"
echo "Config: ${CONFIGFILE}"
echo "------------------------------------------------"
python main.py --repeat ${COUNT} --config ${CONFIGFILE} &
PYTHON_PID=$!
wait $PYTHON_PID
RESULT=$?
echo "------------------------------------------------"
echo "PYTHON EXIT CODE : ${RESULT}"
echo "------------------------------------------------"
if [ "$RESULT" = "1" ]; then
echo 'Restarting... (RESULT=1)'
update_plugins
else
echo "Exiting... (RESULT=${RESULT})"
break
fi
COUNT=$(expr $COUNT + 1)
done