main
Shane 7 months ago
parent 964e6d1816
commit 12383c6d4e
  1. 213
      manage_scripts.sh
  2. 1
      requirements.txt

@ -6,104 +6,18 @@ LOG_DIR="$BASE_DIR/logs"
LOCK_DIR="$BASE_DIR/locks" LOCK_DIR="$BASE_DIR/locks"
mkdir -p "$LOG_DIR" "$LOCK_DIR" || { echo "Error: Failed to create $LOG_DIR or $LOCK_DIR"; exit 1; } mkdir -p "$LOG_DIR" "$LOCK_DIR" || { echo "Error: Failed to create $LOG_DIR or $LOCK_DIR"; exit 1; }
# Handle stop command # Log function
if [ "$1" == "stop" ]; then log() {
log "Received stop command, stopping all scripts..." echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
stop_scripts echo "$1"
if pkill -TERM -f "$VENV_PYTHON.*foodie_engagement_generator"; then }
log "Sent TERM to foodie_engagement_generator.py"
sleep 2
pkill -9 -f "$VENV_PYTHON.*foodie_engagement_generator" || true
else
log "No running foodie_engagement_generator.py found"
fi
rm -f "$LOCK_DIR/foodie_engagement_generator.lock" || log "Failed to remove foodie_engagement_generator.lock"
log "Stopped foodie_engagement_generator.py"
if pkill -TERM -f "$VENV_PYTHON.*foodie_weekly_thread"; then
log "Sent TERM to foodie_weekly_thread.py"
sleep 2
pkill -9 -f "$VENV_PYTHON.*foodie_weekly_thread" || true
else
log "No running foodie_weekly_thread.py found"
fi
rm -f "$LOCK_DIR/foodie_weekly_thread.lock" || log "Failed to remove foodie_weekly_thread.lock"
log "Stopped foodie_weekly_thread.py"
log "All scripts stopped. Reminder: Disable cron jobs to prevent automatic restarts (crontab -e)."
exit 0
fi
# Handle start command
if [ "$1" == "start" ]; then
log "Received start command, starting all scripts..."
cd "$BASE_DIR" || { log "Failed to change to $BASE_DIR"; exit 1; }
source "$BASE_DIR/venv/bin/activate" || { log "Failed to activate virtual environment"; exit 1; }
if [ -f "$BASE_DIR/.env" ]; then
while IFS='=' read -r key value; do
if [[ ! -z "$key" && ! "$key" =~ ^# ]]; then
export "$key=$value"
fi
done < <(grep -v '^#' "$BASE_DIR/.env")
log ".env variables loaded"
else
log "Error: .env file not found at $BASE_DIR/.env"
exit 1
fi
for script in foodie_automator_rss.py foodie_automator_reddit.py foodie_automator_google.py; do
if [ -f "$script" ]; then
sleep_time=$(run_script "$script")
if [ -n "$sleep_time" ]; then
log "Sleeping for $sleep_time seconds after $script"
sleep "$sleep_time"
fi
else
log "Script $script not found"
fi
done
if [ -f "foodie_engagement_generator.py" ]; then
if ! check_running "foodie_engagement_generator"; then
log "Running foodie_engagement_generator.py..."
"$VENV_PYTHON" "foodie_engagement_generator.py" >> "$BASE_DIR/logs/foodie_engagement_generator.log" 2>&1
log "foodie_engagement_generator.py completed"
fi
else
log "Script foodie_engagement_generator.py not found"
fi
log "All scripts started. Ensure cron jobs are enabled for automatic scheduling (crontab -l)."
exit 0
fi
# Handle update command
if [ "$1" == "update" ]; then
if [ -z "$2" ]; then
log "Error: Package name required. Usage: $0 update <package_name> [version]"
exit 1
fi
log "Updating package $2..."
if [ -f "$BASE_DIR/update_package.sh" ]; then
"$BASE_DIR/update_package.sh" "$2" "${3:-latest}" || {
log "Error: Failed to update package $2"
exit 1
}
log "Package $2 updated successfully"
exit 0
else
log "Error: update_package.sh not found"
exit 1
fi
fi
# Directory to monitor # Directory to monitor
BASE_DIR="/home/shane/foodie_automator"
CHECKSUM_FILE="$BASE_DIR/.file_checksum" CHECKSUM_FILE="$BASE_DIR/.file_checksum"
LOG_FILE="$BASE_DIR/logs/manage_scripts.log" LOG_FILE="$BASE_DIR/logs/manage_scripts.log"
VENV_PYTHON="$BASE_DIR/venv/bin/python" VENV_PYTHON="$BASE_DIR/venv/bin/python"
LOCK_DIR="$BASE_DIR/locks" LOCK_DIR="$BASE_DIR/locks"
# Log function
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Calculate checksum of files (excluding logs, JSON files, and venv) # Calculate checksum of files (excluding logs, JSON files, and venv)
calculate_checksum() { calculate_checksum() {
find "$BASE_DIR" -type f \ find "$BASE_DIR" -type f \
@ -141,9 +55,19 @@ run_script() {
return 1 return 1
fi fi
log "Running $script..." log "Running $script..."
"$VENV_PYTHON" "$script" >> "$script_log" 2>&1 "$VENV_PYTHON" "$script" >> "$script_log" 2>&1 &
local pid=$!
echo "$pid" > "$LOCK_DIR/${script_name}.lock"
wait "$pid"
local exit_code=$?
if [ $exit_code -eq 0 ]; then
log "$script completed successfully"
else
log "$script failed with exit code $exit_code"
fi
sleep_time=$(tail -n 1 "$script_log" | grep -oP 'sleep_time: \K[0-9]+' || echo $((RANDOM % 601 + 1200))) sleep_time=$(tail -n 1 "$script_log" | grep -oP 'sleep_time: \K[0-9]+' || echo $((RANDOM % 601 + 1200)))
log "$script completed, sleep_time: $sleep_time seconds" log "$script completed, sleep_time: $sleep_time seconds"
rm -f "$LOCK_DIR/${script_name}.lock"
echo "$sleep_time" echo "$sleep_time"
} }
@ -153,14 +77,13 @@ stop_scripts() {
for script in foodie_automator_*.py; do for script in foodie_automator_*.py; do
if [ -f "$script" ] && [ "$script" != "foodie_weekly_thread.py" ] && [ "$script" != "foodie_engagement_tweet.py" ]; then if [ -f "$script" ] && [ "$script" != "foodie_weekly_thread.py" ] && [ "$script" != "foodie_engagement_tweet.py" ]; then
local script_name="${script%.py}" local script_name="${script%.py}"
pkill -TERM -f "$VENV_PYTHON.*$script_name" || true if pkill -TERM -f "$VENV_PYTHON.*$script_name"; then
fi log "Sent TERM to $script_name"
done sleep 2
sleep 10 pkill -9 -f "$VENV_PYTHON.*$script_name" || true
for script in foodie_automator_*.py; do else
if [ -f "$script" ] && [ "$script" != "foodie_weekly_thread.py" ] && [ "$script" != "foodie_engagement_tweet.py" ]; then log "No running $script_name found"
local script_name="${script%.py}" fi
pkill -9 -f "$VENV_PYTHON.*$script_name" || true
rm -f "$LOCK_DIR/${script_name}.lock" rm -f "$LOCK_DIR/${script_name}.lock"
log "Removed lock file for $script_name" log "Removed lock file for $script_name"
fi fi
@ -178,33 +101,86 @@ update_dependencies() {
fi fi
source "$BASE_DIR/venv/bin/activate" source "$BASE_DIR/venv/bin/activate"
"$VENV_PYTHON" -m pip install --upgrade pip "$VENV_PYTHON" -m pip install --upgrade pip
if [ -f "requirements.lock" ]; then if [ -f "requirements.txt" ]; then
"$VENV_PYTHON" -m pip install -r requirements.lock || {
log "Failed to install requirements.lock, falling back to requirements.txt"
if [ -f "requirements.txt" ]; then
"$VENV_PYTHON" -m pip install -r requirements.txt || {
log "Failed to install requirements.txt, attempting core dependencies"
"$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib
log "Fallback: Installed core dependencies"
}
else
log "Error: requirements.txt not found, installing core dependencies"
"$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib
fi
}
elif [ -f "requirements.txt" ]; then
"$VENV_PYTHON" -m pip install -r requirements.txt || { "$VENV_PYTHON" -m pip install -r requirements.txt || {
log "Failed to install requirements.txt, attempting core dependencies" log "Failed to install requirements.txt, attempting core dependencies"
"$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib "$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib psutil
log "Fallback: Installed core dependencies" log "Fallback: Installed core dependencies"
} }
else else
log "Error: Neither requirements.lock nor requirements.txt found, installing core dependencies" log "Error: requirements.txt not found, installing core dependencies"
"$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib "$VENV_PYTHON" -m pip install requests openai beautifulsoup4 feedparser praw duckduckgo_search selenium Pillow pytesseract webdriver-manager tweepy python-dotenv flickr-api filelock requests-oauthlib psutil
fi fi
log "Dependencies updated." log "Dependencies updated."
} }
# Handle stop command
if [ "$1" == "stop" ]; then
log "Received stop command, stopping all scripts..."
stop_scripts
if pkill -TERM -f "$VENV_PYTHON.*foodie_engagement_generator"; then
log "Sent TERM to foodie_engagement_generator.py"
sleep 2
pkill -9 -f "$VENV_PYTHON.*foodie_engagement_generator" || true
else
log "No running foodie_engagement_generator.py found"
fi
rm -f "$LOCK_DIR/foodie_engagement_generator.lock" || log "Failed to remove foodie_engagement_generator.lock"
log "Stopped foodie_engagement_generator.py"
if pkill -TERM -f "$VENV_PYTHON.*foodie_weekly_thread"; then
log "Sent TERM to foodie_weekly_thread.py"
sleep 2
pkill -9 -f "$VENV_PYTHON.*foodie_weekly_thread" || true
else
log "No running foodie_weekly_thread.py found"
fi
rm -f "$LOCK_DIR/foodie_weekly_thread.lock" || log "Failed to remove foodie_weekly_thread.lock"
log "Stopped foodie_weekly_thread.py"
log "All scripts stopped. Reminder: Disable cron jobs to prevent automatic restarts (crontab -e)."
exit 0
fi
# Handle start command
if [ "$1" == "start" ]; then
log "Received start command, starting all scripts..."
cd "$BASE_DIR" || { log "Failed to change to $BASE_DIR"; exit 1; }
source "$BASE_DIR/venv/bin/activate" || { log "Failed to activate virtual environment"; exit 1; }
if [ -f "$BASE_DIR/.env" ]; then
while IFS='=' read -r key value; do
if [[ ! -z "$key" && ! "$key" =~ ^# ]]; then
export "$key=$value"
fi
done < <(grep -v '^#' "$BASE_DIR/.env")
log ".env variables loaded"
else
log "Error: .env file not found at $BASE_DIR/.env"
exit 1
fi
for script in foodie_automator_rss.py foodie_automator_reddit.py foodie_automator_google.py; do
if [ -f "$script" ]; then
sleep_time=$(run_script "$script")
if [ -n "$sleep_time" ]; then
log "Sleeping for $sleep_time seconds after $script"
sleep "$sleep_time"
fi
else
log "Script $script not found"
exit 1
fi
done
if [ -f "foodie_engagement_generator.py" ]; then
if ! check_running "foodie_engagement_generator"; then
log "Running foodie_engagement_generator.py..."
"$VENV_PYTHON" "foodie_engagement_generator.py" >> "$BASE_DIR/logs/foodie_engagement_generator.log" 2>&1
log "foodie_engagement_generator.py completed"
fi
else
log "Script foodie_engagement_generator.py not found"
fi
log "All scripts started. Ensure cron jobs are enabled for automatic scheduling (crontab -l)."
exit 0
fi
# Main logic # Main logic
log "Checking for file changes..." log "Checking for file changes..."
CURRENT_CHECKSUM=$(calculate_checksum) CURRENT_CHECKSUM=$(calculate_checksum)
@ -244,6 +220,7 @@ for script in foodie_automator_rss.py foodie_automator_reddit.py foodie_automato
fi fi
else else
log "Script $script not found" log "Script $script not found"
exit 1
fi fi
done done
log "All scripts processed." log "All scripts processed."

@ -13,3 +13,4 @@ python-dotenv==1.1.0
flickr-api==0.7.7 flickr-api==0.7.7
filelock==3.16.1 filelock==3.16.1
requests-oauthlib==2.0.0 requests-oauthlib==2.0.0
psutil==7.0.0
Loading…
Cancel
Save