y83 code / справочник

Планировщик

Задачи, которые выполняются сами по расписанию: команда в терминале или запрос к ИИ в заданный день и час. Работают, даже когда приложение закрыто.

раздел
Подсистемы приложения
пунктов возможностей
34
источник
docs/about/scheduler.md

Возможности

  • Два типа задач: команда оболочки (Terminal) или промпт для ИИ.
  • Расписание словами или точно: каждые 5, 15 или 30 минут, каждый час, ежедневно, по будням, еженедельно, ежемесячно — с выбором часа и минуты. Для нестандартных случаев есть поле своего выражения cron.
  • Показывает человеческим языком, когда задача выполнится в следующий раз, и подсказывает следующие три запуска прямо в форме.
  • Часовой пояс задаётся отдельно: чипы с основными зонами плюс поле для любой другой. Задание «в 9 утра» сработает в 9 утра именно в выбранной зоне.
  • Повторы при ошибке: сколько раз пробовать ещё и с какой паузой. По умолчанию одна попытка без повторов.
  • Что делать с пропущенными запусками, если телефон выключался: пропустить, выполнить один раз или выполнить все.
  • Уведомление о завершении: обычное системное уведомление телефона, если задача это просит. По нажатию открывает нужную задачу. Уведомление можно отключить целиком в настройках приложения.
  • Запуск вручную: кнопкой у задачи, не дожидаясь расписания. Долгую задачу можно остановить на лету — сначала вежливое завершение, потом принудительное. Задача, которая уже идёт, второй раз не запустится: кнопка скажет, что она занята. Если свободных слотов нет, будет отказ, а не очередь.
  • Поиск по списку: имя, команда, расписание, часовой пояс или теги.
  • Дублирование задачи — чтобы не настраивать похожую заново.
  • Удаление задачи убирает только её саму: история прошлых прогонов остаётся в общем журнале.
  • История прогонов с живым выводом: видно, что задача пишет прямо сейчас. Фильтры «все», «успешные», «провальные», догрузка более старых записей, копирование вывода и очистка истории.
  • Шесть готовых шаблонов, чтобы не придумывать команду с нуля: проверка свободного места, уборка временных файлов старше недели, недельный бэкап папки проекта, проверка связи с интернетом, еженедельное обновление Termux и ежедневный дайджест от ИИ.
  • Общая пауза: останавливает все задачи разом, не трогая их настройки. Уже идущие задачи при этом не прерываются — пауза влияет только на запуск новых по расписанию. Кнопка «запустить сейчас» паузу не спрашивает, так что задачу всё равно можно запустить вручную.

Технические данные

ПараметрЗначение
Где живут задачив сервере на телефоне, приложение — только интерфейс
Формат расписанияcron из 5 полей: минуты, часы, день, месяц, день недели
Точностьпроверка расписания раз в минуту, секунд не поддерживается
Параллельных задачне больше 3, лишние ждут следующей проверки
Таймаут по умолчанию300 секунд
Размер вывода в логедо 256 КБ на каждый из двух потоков, дальше обрезается
Статусы прогонауспех, ошибка, таймаут, прерван, идёт
Тегивводятся через запятую
Пауза уведомленийобщий выключатель в настройках приложения
Работа агентатолько через REST-вызовы, своих инструментов нет

Где что живёт

Планировщик работает не в приложении, а в сервере на телефоне. Приложение умеет только нарисовать список, отправить изменения и показать вывод. Поэтому:

  • если сервер не запущен, планировщик молчит, а список в приложении пустеет;
  • задачи переживают перезапуск приложения и самого телефона — они на диске;
  • выполняются они от имени сервера, то есть в обычном Termux, с его окружением и правами.

Про два типа задач

  • Команда оболочки выполняется через bash -c. То есть работает всё, что обычно работает в терминале: утилиты Termux, pkg, find, скрипты. Процесс запускается отдельной группой, поэтому остановка задачи действительно убивает и дочерние процессы, а не только саму команду.
  • Промпт ИИ уходит не агентам в чате, а веб-ИИ: это тот же путь, что у обычного запроса к DeepSeek через аккаунты. Ответ целиком пишется в лог задачи. Агент в чате такой запрос не выполняет и в логах не участвует. У запроса два потолка: квота аккаунта — 100 обращений в сутки на аккаунт, и пять минут на ответ — даже если таймаут задачи больше. Если аккаунты закончились или сломались, задача упадёт с ошибкой.

Про очередь и повторы

Одновременно выполнятся максимум три задачи — столько, сколько телефон потянет по памяти. Если все три места заняты, лишняя задача не ставится в очередь, а просто ждёт следующей минутной проверки: тогда она и стартует. Ничего не теряется, но задержка может быть заметной, если задачи долгие.

При ручном запуске поведение другое: если мест нет, сразу приходит отказ «занято, попробуйте позже», а не ожидание.

Повторы срабатывают только при ошибке. Таймаут и остановка вручную повторов не вызывают — на них задача просто заканчивается. Пауза между попытками растёт: по умолчанию 30 секунд перед второй, 60 перед третьей и так дальше, но не больше пяти минут. Каждая попытка пишется в историю отдельной записью, так что видно все попытки, а не только последнюю.

Про пропущенные запуски

Если задача должна была сработать, пока телефон был выключен или сервер лежал, при следующем старте поведение зависит от настройки:

  • none — пропустить, просто пересчитать время следующего запуска;
  • once — выполнить один раз (по умолчанию);
  • all — задумано как «выполнить все пропущенные», но сейчас работает так же, как once: задача запускается один раз. Разницы между этими двумя вариантами планировщик не делает.

Ограничение общее для обоих режимов: за одну проверку планировщик берёт не больше десяти задач, у которых подошло время. Остальные ждут следующей минутной проверки — поэтому за раз большая лавина не обрушивается.

Что показывает лог

Каждый прогон пишется отдельной записью: когда начался, когда закончился, с каким статусом и кодом завершения, что ушло в обычный вывод и что — в вывод ошибок. Если вывод не влез, запись помечается обрезанной. Активный прогон показывается отдельно и обновляется на лету.

Пока задача выполняется, её вывод подтягивается каждые две секунды; список задач обновляется раз в пять секунд, пока экран открыт.

История бывает общей для всех задач и для конкретной задачи; её можно очистить целиком или по одной записи. Сами задачи при этом не трогаются. А удаление задачи наоборот убирает только её, а история прогонов остаётся в общем журнале.

Что агент умеет с планировщиком

Собственных инструментов у планировщика нет — ни одного. Агент работает с ним через обычные запросы к серверу:

  • Посмотреть список задач и статус планировщика: на паузе ли он, сколько задач и сколько из них включено, что выполняется прямо сейчас, когда ближайший запуск и как давно сервер работает. Там же — счётчики: сколько запусков было всего, сколько провалилось и сколько прервано. Ответ приходит только если сервер жив, так что это заодно проверка живости.
  • Создать, изменить, включить, выключить и удалить задачу, задав имя, тип, команду или промпт, расписание, часовой пояс, таймаут, повторы, рабочую папку, переменные окружения, теги и уведомление о завершении. Имя и команда обязательны, тип ограничен двумя значениями, а неверное расписание или часовой пояс сервер отклоняет при сохранении, а не молча.
  • Запустить задачу прямо сейчас и прервать её, если она идёт долго.
  • Проверить расписание до сохранения: сервер считает и говорит, правильное ли выражение, и показывает следующие три запуска. Без этой проверки можно было бы сохранить задачу с опечаткой и потом не понять, почему она молчит.
  • Прочитать историю прогонов и вывод задачи, включая провальные — чтобы понять, почему упало.
  • Очистить историю прогонов, а также выгрузить все задачи в файл и загрузить их обратно — удобно для переноса на другое устройство. При загрузке расписание пересчитывается под текущее время, а задача, которая уже есть, не добавляется второй раз — она пропускается. Поэтому один и тот же файл можно загружать сколько угодно без вреда. Но переименование задачи не поможет: узнаёт он её по внутреннему номеру, а не по имени.

Что важно понимать: команда задачи — обычная команда оболочки, поэтому агент может выполнить её и через терминал, минуя планировщик. Единственное, чего он не делает, это сам запуск по расписанию: расписание срабатывает на сервере, когда агент может и не работать.

Ограничения

  • Без работающего сервера планировщик не работает вообще.
  • Секунд в расписании нет: минимальная частота — раз в минуту.
  • Задачи типа «промпт ИИ» уходят в веб-ИИ и тратят квоту аккаунта, а не выполняются агентом в чате.
  • Пауза общая для всех задач: поставить на паузу одну задачу, не выключив остальные, нельзя. На паузе не срабатывает расписание, но ручной запуск по-прежнему работает.
  • Если задача падает и повторы закончились, она не «залипнет» — просто останется с последним провальным прогоном в истории.
  • Секундная точность и запуск «в этом часе при любом времени» недоступны.

Источник: docs/about/scheduler.md. Страница собрана из документации проекта при сборке сайта — без пересказа.