chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 1m47s
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 1m47s
- Remove get_cookies.sh (targets a container without yt-dlp, already broken), get_cookies_local.sh, start_all.sh/stop_all.sh — these implement the old per-service-compose startup that now conflicts with the unified root docker-compose.yml. - Add cookies-cron/ — a reference copy of the scripts actually running via cron on the separate browser-equipped machine, with setup requirements and instructions for standing up a new cron host. - Update README.md/ARCHITECTURE.md to describe the current unified docker-compose + CI/CD deploy flow and host-mounted cookies instead of the old per-folder workflow.
This commit is contained in:
parent
b3550f4aaf
commit
772e9fd5b4
12 changed files with 479 additions and 171 deletions
36
cookies-cron/README.md
Normal file
36
cookies-cron/README.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# cookies-cron
|
||||
|
||||
Скрипты для регулярного обновления `youtube_cookies.txt`/`instagram_cookies.txt` из реального авторизованного браузера и доставки их по `scp` на прод и тестовые стенды.
|
||||
|
||||
Это **точная копия** скриптов, которые сейчас реально работают по крону на отдельной машине (не на проде — на проде GUI/браузера нет в принципе). Здесь они лежат для справки и на случай, если cron-машину придётся поднимать заново. Ничего в этом репозитории/CI их не запускает и не использует автоматически.
|
||||
|
||||
## Где это должно стоять и работать
|
||||
|
||||
- Машина с **графическим окружением и реальным браузером** (используется Firefox, см. `BROWSER="firefox"` в обоих скриптах) — обычный десктоп/ноутбук, не сервер.
|
||||
- В этом браузере должны быть **активные авторизованные сессии** на youtube.com и на instagram.com — скрипты не логинятся сами, они просто экспортируют куки из уже залогиненного браузера через `yt-dlp --cookies-from-browser`. Если сессии нет (вышел из аккаунта/куки протухли) — экспортируется пустой/неполный набор куков, и видео с этими доменами перестают скачиваться (в Instagram это проявляется как `login required` без всякой ошибки в самом cron-скрипте).
|
||||
- На машине должен быть установлен **`yt-dlp`** и доступен в `PATH` для cron-окружения (не только для интерактивного шелла — у cron urezанный `PATH`). Скрипты исторически не проверяют, что `yt-dlp` реально нашёлся и отработал — при отсутствии `yt-dlp` они тихо «успешно завершаются», просто переиспользуя старый файл cookies. Если куки на проде не обновляются неделями без видимых ошибок — первым делом проверьте `which yt-dlp` на cron-машине.
|
||||
|
||||
## Файлы
|
||||
|
||||
- **`get_instagram_cookies.sh`** / **`get_youtube_cookies.sh`** — извлекают куки из Firefox в локальные `instagram_cookies.txt`/`youtube_cookies.txt` рядом со скриптом.
|
||||
- **`update_cookies.sh`** — оркестратор: гоняет оба скрипта выше, затем разливает результат по `scp` на:
|
||||
- прод (`REMOTE_HOST`/`REMOTE_INSTAGRAM_PATH`/`REMOTE_YOUTUBE_PATH`) — обязательный шаг, при ошибке скрипт падает с `error_exit`;
|
||||
- тестовый стенд (`DEV_HOST`/`DEV_INSTAGRAM_PATH`/`DEV_YOUTUBE_PATH`) — необязательный, при недоступности стенда просто пишет warning и продолжает.
|
||||
|
||||
Значения этих переменных сейчас захардкожены под текущую инфраструктуру (SSH-алиасы `germany`/`hermesDev` из `~/.ssh/config` той машины, где крон запущен) — при разворачивании на новой cron-машине их нужно поправить под актуальные хосты/пути.
|
||||
|
||||
## Установка на новую cron-машину
|
||||
|
||||
```bash
|
||||
# 1. yt-dlp должен быть в PATH (включая cron-окружение)
|
||||
sudo dnf install -y yt-dlp # или: pip install --user yt-dlp / pipx install yt-dlp
|
||||
|
||||
# 2. Залогиниться в Firefox на youtube.com и instagram.com
|
||||
|
||||
# 3. Прописать актуальные REMOTE_HOST/DEV_HOST и пути в update_cookies.sh
|
||||
|
||||
# 4. Добавить в crontab
|
||||
*/20 * * * * /bin/bash -c '/path/to/cookies-cron/update_cookies.sh' >> /path/to/cookies-cron/cron_error.log 2>&1
|
||||
```
|
||||
|
||||
На принимающей стороне (прод и тестовый стенд) cookies монтируются в контейнеры с хоста — см. `docker-compose.prod.yml`/`docker-compose.yml` и раздел «Cookies на проде» в корневом `README.md`. Перезапуск контейнеров после доставки не требуется — `yt-dlp` читает файл с диска при каждом запросе.
|
||||
76
cookies-cron/get_instagram_cookies.sh
Executable file
76
cookies-cron/get_instagram_cookies.sh
Executable file
|
|
@ -0,0 +1,76 @@
|
|||
#!/bin/bash
|
||||
# Скрипт для получения cookies Instagram через yt-dlp из Firefox
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
COOKIES_FILE="$SCRIPT_DIR/instagram_cookies.txt"
|
||||
BROWSER="firefox"
|
||||
|
||||
# Если запущено с sudo, используем HOME реального пользователя
|
||||
if [ -n "$SUDO_USER" ]; then
|
||||
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
||||
export HOME="$REAL_HOME"
|
||||
echo "⚠️ Обнаружен sudo, использую домашнюю директорию пользователя: $HOME"
|
||||
fi
|
||||
|
||||
echo "Получение cookies Instagram из Firefox..."
|
||||
echo "Файл cookies будет сохранен в: $COOKIES_FILE"
|
||||
echo "Получаю cookies..."
|
||||
|
||||
# Извлекаем cookies из браузера напрямую из базы данных (быстро)
|
||||
# --cookies-from-browser извлекает все cookies для домена
|
||||
# Используем один запрос - все cookies для instagram.com будут извлечены
|
||||
echo "Получаю cookies из браузера..."
|
||||
timeout 10 yt-dlp \
|
||||
--cookies-from-browser "$BROWSER" \
|
||||
--cookies "$COOKIES_FILE" \
|
||||
--no-download \
|
||||
--quiet \
|
||||
--socket-timeout 5 \
|
||||
"https://www.instagram.com" 2>&1 | head -20 || true
|
||||
|
||||
# Проверяем, был ли создан файл cookies (не проверяем EXIT_CODE, т.к. команды могут завершиться с ошибками, но cookies могут быть получены)
|
||||
|
||||
if [ -f "$COOKIES_FILE" ]; then
|
||||
# Проверяем, что файл содержит данные (не только заголовки)
|
||||
COOKIE_LINES=$(grep -v '^#' "$COOKIES_FILE" | grep -v '^$' | wc -l)
|
||||
|
||||
if [ "$COOKIE_LINES" -gt 0 ]; then
|
||||
echo ""
|
||||
echo "✅ Cookies успешно сохранены в $COOKIES_FILE"
|
||||
echo " Найдено строк с cookies: $COOKIE_LINES"
|
||||
echo ""
|
||||
echo "Теперь перезапустите instagram-downloader:"
|
||||
echo " docker compose -f instagram-downloader/docker-compose.yml restart"
|
||||
echo ""
|
||||
echo "Или перезапустите все сервисы:"
|
||||
echo " ./stop_all.sh && ./start_all.sh"
|
||||
else
|
||||
echo ""
|
||||
echo "❌ Ошибка: файл cookies создан, но не содержит данных"
|
||||
rm -f "$COOKIES_FILE"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "❌ Ошибка: файл cookies не был создан"
|
||||
echo ""
|
||||
echo "Возможные причины:"
|
||||
echo "1. Firefox не найден или недоступен"
|
||||
echo "2. Проблемы с правами доступа к файлу cookies браузера"
|
||||
echo "3. Cookies не найдены в браузере"
|
||||
echo ""
|
||||
echo "Проверка:"
|
||||
if [ -n "$SUDO_USER" ]; then
|
||||
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
||||
FIREFOX_DIR="$REAL_HOME/.mozilla/firefox"
|
||||
else
|
||||
FIREFOX_DIR="$HOME/.mozilla/firefox"
|
||||
fi
|
||||
if [ -d "$FIREFOX_DIR" ]; then
|
||||
echo " ✓ Директория Firefox найдена: $FIREFOX_DIR"
|
||||
else
|
||||
echo " ✗ Директория Firefox не найдена: $FIREFOX_DIR"
|
||||
echo " Попробуйте запустить скрипт БЕЗ sudo: ./get_instagram_cookies.sh"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
217
cookies-cron/get_youtube_cookies.sh
Executable file
217
cookies-cron/get_youtube_cookies.sh
Executable file
|
|
@ -0,0 +1,217 @@
|
|||
#!/bin/bash
|
||||
# Скрипт для получения cookies YouTube через yt-dlp из Firefox
|
||||
# Предназначен для запуска на Ubuntu 24.04 с авторизованным Firefox
|
||||
# Результат копируется через cron на серверы со службами скачивания
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
COOKIES_FILE="$SCRIPT_DIR/youtube_cookies.txt"
|
||||
BROWSER="firefox"
|
||||
TEMP_FILE="${COOKIES_FILE}.tmp"
|
||||
|
||||
# Определяем HOME пользователя (работает для sudo и обычного запуска)
|
||||
if [ -n "$SUDO_USER" ]; then
|
||||
REAL_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
|
||||
export HOME="$REAL_HOME"
|
||||
elif [ -z "$HOME" ] || [ "$HOME" = "/root" ]; then
|
||||
# Если HOME не установлен или это root, пытаемся найти реального пользователя
|
||||
REAL_USER=$(whoami)
|
||||
if [ "$REAL_USER" != "root" ]; then
|
||||
export HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Проверка для cron: если запущен без терминала, меньше вывода
|
||||
if [ -t 0 ]; then
|
||||
VERBOSE=1
|
||||
else
|
||||
VERBOSE=0
|
||||
fi
|
||||
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo "Получение cookies YouTube из Firefox..."
|
||||
echo "Файл cookies будет сохранен в: $COOKIES_FILE"
|
||||
fi
|
||||
|
||||
# Проверяем наличие yt-dlp
|
||||
if ! command -v yt-dlp &> /dev/null; then
|
||||
echo "ERROR: yt-dlp не найден в системе" >&2
|
||||
echo "Установите: sudo apt install yt-dlp (Ubuntu) или pip install yt-dlp" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo "Получаю cookies..."
|
||||
fi
|
||||
|
||||
# Удаляем старый временный файл
|
||||
rm -f "$TEMP_FILE"
|
||||
|
||||
# Извлекаем cookies из браузера напрямую из базы данных
|
||||
# --cookies-from-browser извлекает cookies для всех доменов, связанных с URL
|
||||
# Используем один запрос с основным URL - cookies для всех поддоменов будут извлечены
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo "Получаю cookies из браузера..."
|
||||
timeout 10 yt-dlp \
|
||||
--cookies-from-browser "$BROWSER" \
|
||||
--cookies "$TEMP_FILE" \
|
||||
--no-download \
|
||||
--quiet \
|
||||
--socket-timeout 5 \
|
||||
"https://www.youtube.com" > /dev/null 2>&1 || true
|
||||
else
|
||||
timeout 10 yt-dlp \
|
||||
--cookies-from-browser "$BROWSER" \
|
||||
--cookies "$TEMP_FILE" \
|
||||
--no-download \
|
||||
--quiet \
|
||||
--socket-timeout 5 \
|
||||
"https://www.youtube.com" > /dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Функция проверки валидности куков
|
||||
check_cookies() {
|
||||
local file="$1"
|
||||
local current_time=$(date +%s)
|
||||
|
||||
# Проверяем существование файла
|
||||
if [ ! -f "$file" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Проверяем, что файл содержит данные (не только заголовки)
|
||||
local cookie_lines=$(grep -v '^#' "$file" | grep -v '^$' | wc -l)
|
||||
if [ "$cookie_lines" -eq 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Проверяем наличие YouTube-куков
|
||||
local youtube_cookies=$(grep -E '\.youtube\.com|youtube\.com' "$file" | grep -v '^#' | wc -l)
|
||||
if [ "$youtube_cookies" -eq 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Проверяем срок действия куков (должен быть хотя бы один не просроченный)
|
||||
local valid_cookies=0
|
||||
local expired_cookies=0
|
||||
|
||||
# Используем awk для более надежного парсинга
|
||||
while IFS=$'\t' read -r domain flag path secure expiration name value; do
|
||||
# Пропускаем комментарии и пустые строки
|
||||
[[ "$domain" =~ ^#.*$ ]] && continue
|
||||
[[ -z "$domain" ]] && continue
|
||||
|
||||
# Проверяем только YouTube-куки
|
||||
if [[ "$domain" =~ youtube\.com ]]; then
|
||||
if [ "$expiration" = "0" ] || [ -z "$expiration" ]; then
|
||||
# Сессионные куки (expiration=0) считаем валидными
|
||||
valid_cookies=$((valid_cookies + 1))
|
||||
else
|
||||
# Проверяем срок действия
|
||||
if [ "$expiration" -gt "$current_time" ] 2>/dev/null; then
|
||||
valid_cookies=$((valid_cookies + 1))
|
||||
else
|
||||
expired_cookies=$((expired_cookies + 1))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < "$file"
|
||||
|
||||
# Должен быть хотя бы один валидный YouTube-куки
|
||||
if [ "$valid_cookies" -eq 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Если есть просроченные куки, выводим предупреждение, но не считаем критичным
|
||||
if [ "$expired_cookies" -gt 0 ] && [ "$VERBOSE" = "1" ]; then
|
||||
echo "⚠️ Предупреждение: найдено $expired_cookies просроченных YouTube-куков" >&2
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Проверяем результат
|
||||
if [ -f "$TEMP_FILE" ] && check_cookies "$TEMP_FILE"; then
|
||||
# Куки валидны, переносим во временный файл в финальный
|
||||
mv "$TEMP_FILE" "$COOKIES_FILE"
|
||||
|
||||
# Собираем статистику для вывода
|
||||
COOKIE_LINES=$(grep -v '^#' "$COOKIES_FILE" | grep -v '^$' | wc -l)
|
||||
YOUTUBE_COOKIES=$(grep -E '\.youtube\.com|youtube\.com' "$COOKIES_FILE" | grep -v '^#' | wc -l)
|
||||
IMPORTANT_COOKIES=$(grep -E 'VISITOR_INFO1_LIVE|__Secure-3PSID|PREF|__Secure-YNID' "$COOKIES_FILE" | grep -v '^#' | wc -l)
|
||||
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo ""
|
||||
echo "✅ Cookies успешно сохранены в $COOKIES_FILE"
|
||||
echo " Всего строк с cookies: $COOKIE_LINES"
|
||||
echo " YouTube-куков: $YOUTUBE_COOKIES"
|
||||
echo " Важных куков: $IMPORTANT_COOKIES"
|
||||
echo ""
|
||||
echo "Файл готов к копированию на серверы через cron"
|
||||
else
|
||||
# Минимальный вывод для cron (можно логировать в файл)
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - YouTube cookies updated: $YOUTUBE_COOKIES cookies, $IMPORTANT_COOKIES important"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
else
|
||||
# Очищаем временный файл при ошибке
|
||||
rm -f "$TEMP_FILE"
|
||||
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo ""
|
||||
echo "❌ Ошибка: не удалось получить валидные YouTube-куки"
|
||||
echo ""
|
||||
echo "Возможные причины:"
|
||||
echo "1. В Firefox нет куков для YouTube"
|
||||
echo "2. Откройте YouTube в Firefox и войдите в аккаунт"
|
||||
echo "3. Все куки просрочены - обновите их в браузере"
|
||||
echo ""
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - ERROR: Failed to get valid YouTube cookies" >&2
|
||||
fi
|
||||
|
||||
if [ ! -f "$COOKIES_FILE" ]; then
|
||||
# Если файла не было, это критичная ошибка
|
||||
exit 1
|
||||
else
|
||||
# Если файл был, просто оставляем старый (лучше работать со старыми куками чем без них)
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo "⚠️ Оставляю существующий файл cookies без изменений"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "$TEMP_FILE" ] && [ ! -f "$COOKIES_FILE" ]; then
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo ""
|
||||
echo "❌ Ошибка: файл cookies не был создан"
|
||||
echo ""
|
||||
echo "Возможные причины:"
|
||||
echo "1. Firefox не найден или недоступен"
|
||||
echo "2. Проблемы с правами доступа к файлу cookies браузера"
|
||||
echo "3. Cookies не найдены в браузере"
|
||||
echo ""
|
||||
echo "Проверка:"
|
||||
FIREFOX_DIR="$HOME/.mozilla/firefox"
|
||||
if [ -d "$FIREFOX_DIR" ]; then
|
||||
echo " ✓ Директория Firefox найдена: $FIREFOX_DIR"
|
||||
else
|
||||
echo " ✗ Директория Firefox не найдена: $FIREFOX_DIR"
|
||||
echo " Убедитесь что Firefox установлен и вы авторизованы на YouTube"
|
||||
fi
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - ERROR: Cookies file was not created" >&2
|
||||
fi
|
||||
|
||||
# Если был старый файл, оставляем его
|
||||
if [ -f "$COOKIES_FILE" ]; then
|
||||
if [ "$VERBOSE" = "1" ]; then
|
||||
echo "⚠️ Оставляю существующий файл cookies без изменений"
|
||||
fi
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
111
cookies-cron/update_cookies.sh
Executable file
111
cookies-cron/update_cookies.sh
Executable file
|
|
@ -0,0 +1,111 @@
|
|||
#!/bin/bash
|
||||
# Скрипт для обновления cookies Instagram и YouTube через cron
|
||||
# Запускает скрипты получения cookies и копирует их на удаленный хост
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Определяем директорию скрипта
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Настройки
|
||||
INSTAGRAM_SCRIPT="$SCRIPT_DIR/get_instagram_cookies.sh"
|
||||
YOUTUBE_SCRIPT="$SCRIPT_DIR/get_youtube_cookies.sh"
|
||||
INSTAGRAM_COOKIES="$SCRIPT_DIR/instagram_cookies.txt"
|
||||
YOUTUBE_COOKIES="$SCRIPT_DIR/youtube_cookies.txt"
|
||||
REMOTE_HOST="germany"
|
||||
REMOTE_INSTAGRAM_PATH="/root/services/videoDownloadTGbot/instagram_cookies.txt"
|
||||
REMOTE_YOUTUBE_PATH="/root/services/videoDownloadTGbot/youtube_cookies.txt"
|
||||
DEV_HOST="hermesDev"
|
||||
DEV_INSTAGRAM_PATH="services/videoDownloadTGbot/instagram-downloader/instagram_cookies.txt"
|
||||
DEV_YOUTUBE_PATH="services/videoDownloadTGbot/youtube-downloader/youtube_cookies.txt"
|
||||
LOG_FILE="$SCRIPT_DIR/cron.log"
|
||||
|
||||
# Функция логирования
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Функция обработки ошибок
|
||||
error_exit() {
|
||||
log "ОШИБКА: $*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
log "=== Начало обновления cookies ==="
|
||||
|
||||
# Проверяем наличие скриптов
|
||||
if [ ! -f "$INSTAGRAM_SCRIPT" ]; then
|
||||
error_exit "Скрипт не найден: $INSTAGRAM_SCRIPT"
|
||||
fi
|
||||
|
||||
if [ ! -f "$YOUTUBE_SCRIPT" ]; then
|
||||
error_exit "Скрипт не найден: $YOUTUBE_SCRIPT"
|
||||
fi
|
||||
|
||||
# Проверяем, что скрипты исполняемые
|
||||
chmod +x "$INSTAGRAM_SCRIPT" "$YOUTUBE_SCRIPT"
|
||||
|
||||
# Получаем cookies Instagram
|
||||
log "Получение cookies Instagram..."
|
||||
if bash "$INSTAGRAM_SCRIPT" >> "$LOG_FILE" 2>&1; then
|
||||
if [ -f "$INSTAGRAM_COOKIES" ]; then
|
||||
log "✅ Cookies Instagram успешно получены"
|
||||
else
|
||||
error_exit "Файл cookies Instagram не был создан"
|
||||
fi
|
||||
else
|
||||
error_exit "Ошибка при получении cookies Instagram (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Получаем cookies YouTube
|
||||
log "Получение cookies YouTube..."
|
||||
if bash "$YOUTUBE_SCRIPT" >> "$LOG_FILE" 2>&1; then
|
||||
if [ -f "$YOUTUBE_COOKIES" ]; then
|
||||
log "✅ Cookies YouTube успешно получены"
|
||||
else
|
||||
error_exit "Файл cookies YouTube не был создан"
|
||||
fi
|
||||
else
|
||||
# YouTube скрипт может завершиться с кодом 0, даже если новый файл не создан (использует старый)
|
||||
if [ -f "$YOUTUBE_COOKIES" ]; then
|
||||
log "✅ Cookies YouTube (возможно использован старый файл)"
|
||||
else
|
||||
error_exit "Файл cookies YouTube не найден"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Копируем cookies на удаленный хост (прод)
|
||||
log "Копирование cookies на удаленный хост $REMOTE_HOST..."
|
||||
|
||||
# Копируем Instagram cookies
|
||||
if scp -q "$INSTAGRAM_COOKIES" "${REMOTE_HOST}:${REMOTE_INSTAGRAM_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ Instagram cookies скопированы на $REMOTE_HOST"
|
||||
else
|
||||
error_exit "Ошибка при копировании Instagram cookies (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Копируем YouTube cookies
|
||||
if scp -q "$YOUTUBE_COOKIES" "${REMOTE_HOST}:${REMOTE_YOUTUBE_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ YouTube cookies скопированы на $REMOTE_HOST"
|
||||
else
|
||||
error_exit "Ошибка при копировании YouTube cookies (код возврата: $?)"
|
||||
fi
|
||||
|
||||
# Копируем cookies на тестовый стенд (не блокируем прод-доставку, если стенд недоступен)
|
||||
log "Копирование cookies на тестовый стенд $DEV_HOST..."
|
||||
|
||||
if scp -q "$INSTAGRAM_COOKIES" "${DEV_HOST}:${DEV_INSTAGRAM_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ Instagram cookies скопированы на $DEV_HOST"
|
||||
else
|
||||
log "⚠️ Не удалось скопировать Instagram cookies на $DEV_HOST (продолжаем)"
|
||||
fi
|
||||
|
||||
if scp -q "$YOUTUBE_COOKIES" "${DEV_HOST}:${DEV_YOUTUBE_PATH}" 2>>"$LOG_FILE"; then
|
||||
log "✅ YouTube cookies скопированы на $DEV_HOST"
|
||||
else
|
||||
log "⚠️ Не удалось скопировать YouTube cookies на $DEV_HOST (продолжаем)"
|
||||
fi
|
||||
|
||||
log "=== Обновление cookies завершено успешно ==="
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue