#!/bin/bash # Скрипт настройки cron задач для проекта ERV # Автор: Фёдор # Дата: $(date +%Y-%m-%d) # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Настройки TOOLS_DIR="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools" PROJECT_PATH="/var/www/fastuser/data/www/erv.clientright.ru" EMAIL="admin@clientright.ru" # Функции для логирования log() { echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" } error() { echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ОШИБКА:${NC} $1" } warning() { echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] ПРЕДУПРЕЖДЕНИЕ:${NC} $1" } info() { echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] ИНФО:${NC} $1" } echo -e "${GREEN}=== НАСТРОЙКА CRON ЗАДАЧ ДЛЯ ПРОЕКТА ERV ===${NC}" echo "Дата: $(date)" echo "" # Проверяем права доступа if [ "$EUID" -ne 0 ]; then error "Этот скрипт должен запускаться с правами root (sudo)" exit 1 fi # Проверяем существование директории с инструментами if [ ! -d "$TOOLS_DIR" ]; then error "Директория с инструментами не найдена: $TOOLS_DIR" exit 1 fi # Проверяем существование скриптов SCRIPTS=( "$TOOLS_DIR/backup_erv.sh" "$TOOLS_DIR/monitor_erv.sh" "$TOOLS_DIR/maintenance_erv.sh" ) for script in "${SCRIPTS[@]}"; do if [ ! -f "$script" ]; then error "Скрипт не найден: $script" exit 1 fi # Делаем скрипты исполняемыми chmod +x "$script" log "Установлены права на выполнение для: $script" done # Создаем временный файл с cron задачами CRON_FILE="/tmp/erv_crontab_$(date +%Y%m%d_%H%M%S)" cat > "$CRON_FILE" << EOF # Cron задачи для проекта ERV # Настроено: $(date) # Автор: Фёдор # Резервное копирование каждый день в 2:00 0 2 * * * $TOOLS_DIR/backup_erv.sh >> $TOOLS_DIR/logs/backup.log 2>&1 # Мониторинг каждые 15 минут */15 * * * * $TOOLS_DIR/monitor_erv.sh >> $TOOLS_DIR/logs/monitor.log 2>&1 # Обслуживание каждую неделю в воскресенье в 3:00 0 3 * * 0 $TOOLS_DIR/maintenance_erv.sh >> $TOOLS_DIR/logs/maintenance.log 2>&1 # Очистка старых логов каждый месяц в первый день в 4:00 0 4 1 * * find $TOOLS_DIR/logs -name "*.log" -mtime +30 -delete # Проверка SSL сертификата каждую неделю в понедельник в 5:00 0 5 * * 1 echo | openssl s_client -servername erv.clientright.ru -connect erv.clientright.ru:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2 | xargs -I {} date -d {} +%s | xargs -I {} expr {} - $(date +%s) | xargs -I {} expr {} / 86400 | xargs -I {} test {} -lt 30 && echo "SSL сертификат истекает через {} дней" | mail -s "SSL Certificate Alert" $EMAIL # Проверка размера папки uploads каждый день в 6:00 0 6 * * * du -sm $PROJECT_PATH/uploads | awk '{if(\$1 > 1024) print "Папка uploads превышает 1GB: " \$1 "MB"}' | mail -s "ERV Uploads Size Alert" $EMAIL # Проверка доступности сайта каждые 5 минут */5 * * * * curl -s --connect-timeout 10 https://erv.clientright.ru/ > /dev/null || echo "Сайт ERV недоступен!" | mail -s "ERV Site Down Alert" $EMAIL # Проверка подключения к базе данных каждые 10 минут */10 * * * * mysql -uci20465_erv -pc7vOXbmG -e "SELECT 1;" ci20465_erv > /dev/null 2>&1 || echo "База данных ERV недоступна!" | mail -s "ERV Database Alert" $EMAIL # Проверка внешних API каждый час 0 * * * * curl -s --connect-timeout 5 https://online.sigmasms.ru/api/ > /dev/null || echo "SMS API недоступен!" | mail -s "ERV SMS API Alert" $EMAIL 0 * * * * curl -s --connect-timeout 5 https://suggestions.dadata.ru/ > /dev/null || echo "DaData API недоступен!" | mail -s "ERV DaData API Alert" $EMAIL 0 * * * * curl -s --connect-timeout 5 https://form.clientright.ru/ > /dev/null || echo "CRM API недоступен!" | mail -s "ERV CRM API Alert" $EMAIL # Еженедельный отчет о состоянии системы (каждый понедельник в 9:00) 0 9 * * 1 $TOOLS_DIR/generate_weekly_report.sh | mail -s "ERV Weekly Report" $EMAIL EOF log "Создан файл с cron задачами: $CRON_FILE" # Создаем директорию для логов mkdir -p "$TOOLS_DIR/logs" log "Создана директория для логов: $TOOLS_DIR/logs" # Создаем скрипт для генерации еженедельного отчета WEEKLY_REPORT_SCRIPT="$TOOLS_DIR/generate_weekly_report.sh" cat > "$WEEKLY_REPORT_SCRIPT" << 'EOF' #!/bin/bash # Генерация еженедельного отчета для проекта ERV # Автор: Фёдор TOOLS_DIR="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools" PROJECT_PATH="/var/www/fastuser/data/www/erv.clientright.ru" echo "ЕЖЕНЕДЕЛЬНЫЙ ОТЧЕТ ПРОЕКТА ERV" echo "==============================" echo "Дата: $(date)" echo "Период: $(date -d '7 days ago' '+%Y-%m-%d') - $(date '+%Y-%m-%d')" echo "" echo "СТАТУС СИСТЕМЫ:" echo "- Сервер: $(hostname)" echo "- ОС: $(lsb_release -d | cut -f2)" echo "- Uptime: $(uptime -p)" echo "" echo "ИСПОЛЬЗОВАНИЕ РЕСУРСОВ:" echo "- Диск: $(df -h $PROJECT_PATH | tail -1 | awk '{print $5}')" echo "- Память: $(free -h | grep Mem | awk '{print $3 "/" $2}')" echo "- CPU: $(uptime | awk -F'load average:' '{print $2}')" echo "" echo "РАЗМЕРЫ ПАПОК:" echo "- uploads: $(du -sh $PROJECT_PATH/uploads 2>/dev/null | cut -f1 || echo 'Не найдена')" echo "- cache: $(du -sh $PROJECT_PATH/cache 2>/dev/null | cut -f1 || echo 'Не найдена')" echo "" echo "СТАТИСТИКА ЛОГОВ:" if [ -f "$TOOLS_DIR/logs/backup.log" ]; then echo "- Резервных копий за неделю: $(grep -c "$(date -d '7 days ago' '+%Y-%m-%d')" $TOOLS_DIR/logs/backup.log 2>/dev/null || echo '0')" fi if [ -f "$TOOLS_DIR/logs/monitor.log" ]; then echo "- Проверок мониторинга за неделю: $(grep -c "$(date -d '7 days ago' '+%Y-%m-%d')" $TOOLS_DIR/logs/monitor.log 2>/dev/null || echo '0')" fi if [ -f "$TOOLS_DIR/logs/maintenance.log" ]; then echo "- Операций обслуживания за неделю: $(grep -c "$(date -d '7 days ago' '+%Y-%m-%d')" $TOOLS_DIR/logs/maintenance.log 2>/dev/null || echo '0')" fi echo "" echo "ПРОБЛЕМЫ ЗА НЕДЕЛЮ:" if [ -f "$TOOLS_DIR/logs/monitor.log" ]; then ERROR_COUNT=$(grep -c "ОШИБКА" $TOOLS_DIR/logs/monitor.log 2>/dev/null || echo '0') WARNING_COUNT=$(grep -c "ПРЕДУПРЕЖДЕНИЕ" $TOOLS_DIR/logs/monitor.log 2>/dev/null || echo '0') echo "- Ошибок: $ERROR_COUNT" echo "- Предупреждений: $WARNING_COUNT" fi echo "" echo "РЕКОМЕНДАЦИИ:" echo "- Проверьте логи на наличие ошибок" echo "- Убедитесь в актуальности резервных копий" echo "- Проверьте доступность внешних API" echo "- Обновите систему при необходимости" echo "" echo "---" echo "Отчет сгенерирован автоматически" echo "Для получения подробной информации используйте скрипты мониторинга" EOF chmod +x "$WEEKLY_REPORT_SCRIPT" log "Создан скрипт еженедельного отчета: $WEEKLY_REPORT_SCRIPT" # Устанавливаем cron задачи log "Устанавливаем cron задачи..." # Сохраняем текущие cron задачи crontab -l > /tmp/current_crontab 2>/dev/null || touch /tmp/current_crontab # Объединяем с новыми задачами cat /tmp/current_crontab "$CRON_FILE" | sort -u > /tmp/merged_crontab # Устанавливаем объединенные задачи crontab /tmp/merged_crontab if [ $? -eq 0 ]; then log "Cron задачи успешно установлены" else error "Не удалось установить cron задачи" exit 1 fi # Показываем установленные задачи log "Установленные cron задачи:" crontab -l | grep -E "(ERV|erv|backup|monitor|maintenance)" # Создаем скрипт для управления cron задачами MANAGE_SCRIPT="$TOOLS_DIR/manage_cron.sh" cat > "$MANAGE_SCRIPT" << 'EOF' #!/bin/bash # Скрипт управления cron задачами для проекта ERV # Автор: Фёдор TOOLS_DIR="/var/www/fastuser/data/www/crm.clientright.ru/erv_project_tools" show_menu() { echo "" echo "=== УПРАВЛЕНИЕ CRON ЗАДАЧАМИ ERV ===" echo "1. Показать все cron задачи ERV" echo "2. Показать логи резервного копирования" echo "3. Показать логи мониторинга" echo "4. Показать логи обслуживания" echo "5. Очистить старые логи" echo "6. Перезапустить cron службу" echo "7. Проверить статус cron службы" echo "0. Выход" echo "" } show_erv_cron() { echo "Cron задачи для проекта ERV:" echo "============================" crontab -l | grep -E "(ERV|erv|backup|monitor|maintenance)" || echo "Задачи не найдены" echo "" } show_backup_logs() { echo "Логи резервного копирования:" echo "============================" if [ -f "$TOOLS_DIR/logs/backup.log" ]; then tail -20 "$TOOLS_DIR/logs/backup.log" else echo "Лог файл не найден" fi echo "" } show_monitor_logs() { echo "Логи мониторинга:" echo "==================" if [ -f "$TOOLS_DIR/logs/monitor.log" ]; then tail -20 "$TOOLS_DIR/logs/monitor.log" else echo "Лог файл не найден" fi echo "" } show_maintenance_logs() { echo "Логи обслуживания:" echo "==================" if [ -f "$TOOLS_DIR/logs/maintenance.log" ]; then tail -20 "$TOOLS_DIR/logs/maintenance.log" else echo "Лог файл не найден" fi echo "" } clean_old_logs() { echo "Очищаем старые логи..." find "$TOOLS_DIR/logs" -name "*.log" -mtime +30 -delete 2>/dev/null echo "Старые логи удалены" echo "" } restart_cron() { echo "Перезапускаем cron службу..." sudo systemctl restart cron echo "Cron служба перезапущена" echo "" } check_cron_status() { echo "Статус cron службы:" echo "===================" sudo systemctl status cron --no-pager echo "" } # Главный цикл while true; do show_menu read -p "Выберите опцию (0-7): " choice case $choice in 1) show_erv_cron ;; 2) show_backup_logs ;; 3) show_monitor_logs ;; 4) show_maintenance_logs ;; 5) clean_old_logs ;; 6) restart_cron ;; 7) check_cron_status ;; 0) echo "Выход"; break ;; *) echo "Неверный выбор. Попробуйте снова." ;; esac echo "" read -p "Нажмите Enter для продолжения..." done EOF chmod +x "$MANAGE_SCRIPT" log "Создан скрипт управления cron: $MANAGE_SCRIPT" # Проверяем статус cron службы log "Проверяем статус cron службы..." if systemctl is-active --quiet cron; then log "Cron служба активна" else warning "Cron служба неактивна, запускаем..." systemctl start cron systemctl enable cron fi # Очищаем временные файлы rm -f /tmp/current_crontab /tmp/merged_crontab "$CRON_FILE" echo "" log "=== НАСТРОЙКА CRON ЗАДАЧ ЗАВЕРШЕНА ===" echo "" info "Установленные задачи:" echo "- Резервное копирование: ежедневно в 2:00" echo "- Мониторинг: каждые 15 минут" echo "- Обслуживание: еженедельно в воскресенье в 3:00" echo "- Очистка логов: ежемесячно" echo "- Проверка SSL: еженедельно" echo "- Проверка размера uploads: ежедневно" echo "- Проверка доступности сайта: каждые 5 минут" echo "- Проверка БД: каждые 10 минут" echo "- Проверка API: ежечасно" echo "- Еженедельный отчет: по понедельникам в 9:00" echo "" info "Для управления cron задачами используйте: $MANAGE_SCRIPT" info "Логи сохраняются в: $TOOLS_DIR/logs/" echo "" exit 0