Files
foxhunt/scripts/install_cron.sh
jgrusewski 650b3894c6 🚀 Wave 160 Phase 5: Complete ML Ensemble + Production Deployment (27 Agents)
## Executive Summary
Deployed 27 parallel agents: all 6 models operational, ensemble working, adaptive
strategy integrated, hyperparameter tuning automated, TFT fixed, critical blocker
resolved (DbnSequenceLoader 99.85% memory reduction 40.6GB→61MB).

## Critical Fixes
- Agent 85: DbnSequenceLoader memory fix (UNBLOCKED all ML training)
- Agent 79: TFT 5 critical bugs fixed
- Agent 86: Adaptive strategy integration (regime-aware ensemble)
- Agent 88: Liquid NN API fix (14 compilation errors)
- Agent 89: Paper trading deployment (LIVE, 3-model ensemble)

## Infrastructure
- Database: 2,127 writes/sec (212% of target)
- Memory: DQN 192MB, PPO 288MB, TFT 384MB (all within targets)
- Ensemble: Sharpe 10.68, latency 35μs, throughput >20K/sec
- Monitoring: 22 alerts, PagerDuty integration

## Files: 193 changed, +70,250 insertions, -414 deletions

🤖 Generated with Claude Code - Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-14 18:41:48 +02:00

140 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
#
# Install Quarterly Retraining Cron Job
#
# This script installs a cron job that runs quarterly model retraining
# on the first Sunday of Jan, Apr, Jul, and Oct at 2 AM.
#
# Usage:
# sudo ./scripts/install_cron.sh
#
# Requirements:
# - Root access (for modifying /etc/cron.d/)
# - Slack webhook URL (optional, for notifications)
# - Email configuration (optional, for notifications)
set -e
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo "Error: This script must be run as root (use sudo)"
exit 1
fi
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
CRON_FILE="/etc/cron.d/foxhunt-quarterly-retrain"
USER="${SUDO_USER:-foxhunt}"
RETRAIN_SCRIPT="$PROJECT_ROOT/scripts/quarterly_retrain.sh"
# Prompt for configuration
read -p "Enter Slack webhook URL (optional, press Enter to skip): " SLACK_WEBHOOK
read -p "Enter email recipients (comma-separated, optional): " EMAIL_RECIPIENTS
# Validate retrain script exists
if [ ! -f "$RETRAIN_SCRIPT" ]; then
echo "Error: Retraining script not found: $RETRAIN_SCRIPT"
exit 1
fi
# Make script executable
chmod +x "$RETRAIN_SCRIPT"
# Create cron job
cat > "$CRON_FILE" << EOF
# Foxhunt Quarterly Model Retraining
#
# Runs on the first Sunday of each quarter (Jan, Apr, Jul, Oct) at 2 AM
# Schedule: minute hour day month weekday
#
# Day 1-7: First week of month
# Month 1,4,7,10: Jan, Apr, Jul, Oct
# Weekday 0: Sunday
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
FOXHUNT_ROOT=$PROJECT_ROOT
SLACK_WEBHOOK=$SLACK_WEBHOOK
EMAIL_RECIPIENTS=$EMAIL_RECIPIENTS
# Run at 2 AM on first Sunday of quarterly months
0 2 1-7 1,4,7,10 0 $USER [ "\$(date +\%u)" = "7" ] && $RETRAIN_SCRIPT >> /var/log/foxhunt/quarterly_retrain.log 2>&1
EOF
# Set correct permissions
chmod 644 "$CRON_FILE"
# Create log directory
mkdir -p /var/log/foxhunt
chown $USER:$USER /var/log/foxhunt
# Create systemd timer (alternative to cron)
TIMER_FILE="/etc/systemd/system/foxhunt-retrain.timer"
SERVICE_FILE="/etc/systemd/system/foxhunt-retrain.service"
cat > "$TIMER_FILE" << EOF
[Unit]
Description=Foxhunt Quarterly Retraining Timer
Documentation=https://github.com/foxhunt/docs/MODEL_RETRAINING_SOP.md
[Timer]
# First Sunday of Jan, Apr, Jul, Oct at 2 AM
OnCalendar=Sun *-01,04,07,10-01..07 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=Foxhunt Quarterly Model Retraining
Documentation=https://github.com/foxhunt/docs/MODEL_RETRAINING_SOP.md
[Service]
Type=oneshot
User=$USER
WorkingDirectory=$PROJECT_ROOT
Environment="FOXHUNT_ROOT=$PROJECT_ROOT"
Environment="SLACK_WEBHOOK=$SLACK_WEBHOOK"
Environment="EMAIL_RECIPIENTS=$EMAIL_RECIPIENTS"
ExecStart=$RETRAIN_SCRIPT
StandardOutput=append:/var/log/foxhunt/quarterly_retrain.log
StandardError=append:/var/log/foxhunt/quarterly_retrain.log
[Install]
WantedBy=multi-user.target
EOF
chmod 644 "$TIMER_FILE" "$SERVICE_FILE"
# Reload systemd
systemctl daemon-reload
echo "✅ Installation complete!"
echo ""
echo "Cron job installed: $CRON_FILE"
echo "Systemd timer installed: $TIMER_FILE"
echo ""
echo "Choose your scheduling method:"
echo ""
echo "Option 1: Cron (traditional)"
echo " Status: Active (check with: cat $CRON_FILE)"
echo " Logs: /var/log/foxhunt/quarterly_retrain.log"
echo ""
echo "Option 2: Systemd timer (recommended)"
echo " Enable: sudo systemctl enable foxhunt-retrain.timer"
echo " Start: sudo systemctl start foxhunt-retrain.timer"
echo " Status: sudo systemctl status foxhunt-retrain.timer"
echo " Logs: sudo journalctl -u foxhunt-retrain.service"
echo ""
echo "Next scheduled run:"
if command -v systemctl &> /dev/null; then
systemctl list-timers foxhunt-retrain.timer --no-pager 2>/dev/null || echo " (Enable timer first)"
fi
echo ""
echo "To test immediately:"
echo " sudo -u $USER $RETRAIN_SCRIPT --dry-run"