102 lines
3.1 KiB
Bash
Executable File
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
|