Расписание и автозапуск
Расписание — очередь файлов, которые Studio запускает сама. Приложение должно быть запущено (или RT в трее). Следующая задача не стартует, пока идёт предыдущая: это не пул потоков, а один исполнитель.
Панель в Studio
Вид: Панель расписания скриптов. Меню: Скрипты → Расписание. У списка задач есть контекстное меню.
Сначала прогоните скрипт руками до стабильного конца (exit без висящего Word/диалога). В расписание кладите уже этот файл с абсолютным путём: относительный путь зависит от текущей папки процесса и ночью легко «теряется».
Панель показывает список и контекстное меню задачи. API нужен, когда робот сам регистрирует задачу при первом запуске или когда задач десятки и кликать руками нереально. Для одной-двух утренних отчётов достаточно UI.
Что должно быть в скрипте до расписания
Объект scheduler
Хаб: WINDOW::$scheduler.
- add($path, $type=0, $date="", $time="", $count=-1, $active=true, $comments="", $add_params="")
- edit · get · activate · delete
- Все задачи: get_count, activate_all, delete_all
- kill_current_script — оборвать текущий, если робот завис и держит очередь
// раз в день в 08:00 (type = 2)
$scheduler->add("C:\\bots\\report.php", 2, "", "08:00", -1, true, "утренний отчёт");
$date и $time — в формате системы Windows (как в подсказке метода: дата вроде 07/03/15, время 08:01:02). $add_params — доп. сведения для типа «по выбору» (с 4.10.6), интервал в минутах.
Типы задач
Параметр $type у add:
- 0 — один раз
- 1 — раз в час · 2 — раз в день · 3 — неделя · 4 — месяц · 5 — год
- 6 — по выбору
- 7 — раз в минуту · 8 — 5 минут · 9 — 10 минут · 10 — полчаса
- 11 — N раз (
$count) · 12 — бесконечно
Не ставьте «каждую минуту» на скрипт, который сам длится три минуты: получите очередь ожидания, не параллельность. Для двух роботов одновременно нужны две копии Studio, не две задачи в одном расписании.
| type | Когда стартует | Когда не ставить |
|---|---|---|
| 0 | Один раз (нужны date/time) | Повторяющийся отчёт |
| 2 | Раз в день в $time | Если прогон длиннее суток |
| 7–10 | Минута / 5 / 10 / 30 мин | Если скрипт сам дольше интервала |
| 11 | Ровно $count раз | Бесконечный робот |
| 12 | Снова сразу после конца | Пока не закрыли зависания и диалоги |
Очередь и зависания
Документация панели прямо говорит: скрипты выполняются последовательно, следующий не стартует, пока работает предыдущий.
Типичный затор: Word/Excel показали диалог «файл залочен», скрипт ждёт клика, расписание молчит до утра. На тесте закрывайте диалоги через UI или не оставляйте документ открытым. Аварийно — kill_current_script (осознанно: текущий прогон оборвётся).
Перед постановкой в очередь прогоните файл руками до конца: должен сам завершиться, без модалки Word и без «нажмите ОК». Относительный путь report.php ночью ищется не из папки проекта в голове оператора, а из рабочей директории процесса — кладите абсолютный путь.
Пример: утренний отчёт
$logger->init(1, true, true, "C:\\bots\\logs\\sched.txt", "");
$n = $scheduler->get_count();
$logger->info("задач в расписании", $n);
$scheduler->add(
"C:\\bots\\report.php",
2,
"",
"08:00",
-1,
true,
"утренний отчёт"
);
Скрипт report.php внутри себя: wait страницы → Excel/PDF → лог «готово». Если отчёт иногда висит на диалоге — очередь на 08:00 следующего дня не стартует, пока висит вчерашний.
edit / activate / delete — точечно. activate_all / delete_all — только когда понимаете, что снесёте все задачи этой копии.
Runtime, трей, Windows Task Scheduler
Ночь без оператора: RT-сборка + «сворачивать в трей» / «скрывать при старте в трей» в настройках. Длинный робот + расписание на одной копии — нормальный паттерн.
Два независимых расписания — две копии и разные порты. Планировщик Windows может просто держать exe RT запущенным; логику «в 8:00 отчёт» удобнее оставить внутри Studio — её видно в панели и в логе скрипта.
Не дублируйте одну и ту же задачу в Windows Task Scheduler и в панели Studio: получите два старта и гонку за Excel/файл. Windows-планировщик — чтобы процесс RT не умирал после перезагрузки; расписание скриптов — внутри уже запущенного приложения.
FAQ
Задача не стартует. Приложение закрыто, путь сменился, предыдущий скрипт ещё работает, задача снята с activate, формат даты/времени не тот, что ждёт Windows.
Сработало дважды. И Studio-расписание, и Windows Task Scheduler стартуют один файл — оставьте один источник.
Нужен запуск с аргументами. Смотрите $add_params и то, как ваш скрипт читает параметры; не путайте с портом HTTP API.
Задача «раз в минуту» копит очередь. Скрипт не успевает закончиться. Поднимите интервал или ускорьте wait/сеть, не плодите копии задачи.
После kill_current_script файл наполовину записан. Это ожидаемо. Делайте запись во временный путь и rename в конце, либо помечайте прогон в логе как оборванный.
Панель пустая после переустановки. Задачи живут в настройках этой копии, не «в скрипте». После чистой установки добавьте снова через UI или add.