From c8f1cc2595ccdab1242c68b418e2cae5fc106ad4 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Fri, 26 Dec 2025 02:14:34 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20runner-timer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/RUNNER_SETUP.md | 87 ++++++++++++++++++++++++++++++++ services/install_runner_timer.sh | 34 +++++++++++++ services/runner.service | 16 ++++++ services/runner.timer | 18 +++++++ 4 files changed, 155 insertions(+) create mode 100644 services/RUNNER_SETUP.md create mode 100644 services/install_runner_timer.sh create mode 100644 services/runner.service create mode 100644 services/runner.timer diff --git a/services/RUNNER_SETUP.md b/services/RUNNER_SETUP.md new file mode 100644 index 0000000..01c2e95 --- /dev/null +++ b/services/RUNNER_SETUP.md @@ -0,0 +1,87 @@ +# Настройка автоматического запуска runner.sh каждый час + +Есть два способа настроить запуск `runner.sh` каждый час: + +## Вариант 1: Systemd Timer (Рекомендуется) + +Этот вариант рекомендуется, так как в проекте уже используются systemd сервисы. + +### Установка: + +1. Скопируйте файлы в systemd: +```bash +sudo cp services/runner.service /etc/systemd/system/ +sudo cp services/runner.timer /etc/systemd/system/ +``` + +2. Или используйте скрипт установки: +```bash +chmod +x services/install_runner_timer.sh +sudo bash services/install_runner_timer.sh +``` + +3. Вручную: +```bash +sudo systemctl daemon-reload +sudo systemctl enable runner.timer +sudo systemctl start runner.timer +``` + +### Управление: + +- Проверить статус: `sudo systemctl status runner.timer` +- Остановить: `sudo systemctl stop runner.timer` +- Запустить: `sudo systemctl start runner.timer` +- Отключить: `sudo systemctl disable runner.timer` +- Просмотр логов: `sudo journalctl -u runner.service -f` +- Список всех timers: `sudo systemctl list-timers` + +### Настройка расписания: + +Отредактируйте файл `/etc/systemd/system/runner.timer`: + +- `OnCalendar=hourly` - каждый час +- `OnCalendar=*-*-* *:00:00` - каждый час в начале часа +- `OnCalendar=*-*-* 0,6,12,18:00:00` - в 0, 6, 12, 18 часов +- `OnCalendar=Mon..Fri 09:00:00` - каждый будний день в 9:00 + +После изменения: `sudo systemctl daemon-reload` + +--- + +## Вариант 2: Cron + +Классический способ для периодических задач. + +### Установка: + +1. Откройте crontab для редактирования: +```bash +sudo crontab -e +``` + +2. Добавьте строку: +```bash +0 * * * * /bin/bash /opt/testbot-git/runner.sh >> /opt/testbot-git/runner_cron.log 2>&1 +``` + +Это запустит скрипт в начале каждого часа (0 минут каждого часа). + +### Альтернативные варианты расписания: + +- `0 * * * *` - каждый час в начале часа (00:00, 01:00, 02:00...) +- `30 * * * *` - каждый час в 30 минут (00:30, 01:30, 02:30...) +- `*/30 * * * *` - каждые 30 минут +- `0 9-17 * * *` - каждый час с 9:00 до 17:00 + +### Просмотр логов: + +Логи будут записываться в `/opt/testbot-git/runner_cron.log` (если указан в crontab). + +--- + +## Рекомендации + +- **Systemd Timer** - лучше для интеграции с существующими сервисами, более гибкое управление, лучшие логи +- **Cron** - проще для простых задач, не требует root прав (можно использовать `crontab -e` без sudo) + diff --git a/services/install_runner_timer.sh b/services/install_runner_timer.sh new file mode 100644 index 0000000..9e64f67 --- /dev/null +++ b/services/install_runner_timer.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Скрипт для установки systemd timer для runner.sh + +# Путь к директории проекта +PROJECT_DIR="/opt/testbot-git" +SERVICES_DIR="$PROJECT_DIR/services" + +echo "Установка systemd timer для runner.sh..." + +# Копирование файлов в systemd +sudo cp "$SERVICES_DIR/runner.service" /etc/systemd/system/ +sudo cp "$SERVICES_DIR/runner.timer" /etc/systemd/system/ + +# Перезагрузка systemd для чтения новых файлов +sudo systemctl daemon-reload + +# Включение и запуск timer +sudo systemctl enable runner.timer +sudo systemctl start runner.timer + +# Проверка статуса +echo "" +echo "Статус timer:" +sudo systemctl status runner.timer --no-pager + +echo "" +echo "Список всех активных timers:" +sudo systemctl list-timers --no-pager + +echo "" +echo "Для просмотра логов используйте:" +echo " sudo journalctl -u runner.service -f" +echo " sudo journalctl -u runner.timer -f" + diff --git a/services/runner.service b/services/runner.service new file mode 100644 index 0000000..d1422dd --- /dev/null +++ b/services/runner.service @@ -0,0 +1,16 @@ +# /etc/systemd/system/runner.service +[Unit] +Description=Zilant Bot Runner - Executes scheduled scripts +After=network.target + +[Service] +Type=oneshot +User=root +WorkingDirectory=/opt/testbot-git +ExecStart=/bin/bash /opt/testbot-git/runner.sh +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target + diff --git a/services/runner.timer b/services/runner.timer new file mode 100644 index 0000000..6161196 --- /dev/null +++ b/services/runner.timer @@ -0,0 +1,18 @@ +# /etc/systemd/system/runner.timer +[Unit] +Description=Zilant Bot Runner Timer - Runs every hour +Requires=runner.service + +[Timer] +# Запуск каждый час +OnCalendar=*-*-* *:10:00 +# Запуск сразу после загрузки системы (опционально) +OnBootSec=5min +# Если пропущен запуск (например, сервер был выключен), запустить сразу после включения +Persistent=true +# Точность запуска (по умолчанию 1 минута, можно уменьшить) +AccuracySec=1min + +[Install] +WantedBy=timers.target +