Сервисный скрипт с перезапуском
Иногда требуется, чтобы некоторый скрипт выполнялся 24/7 и не “падал”, а если “упал”, “завис” или ещё что-то в этом роде, то перезапускался через определённый интервал времени. Другими словами, чтобы скрипт был “вечным” и отказоустойчивым.
Для обеспечения выше сказанного можно использовать следующий шаблон программирования. Следует отметить, что этот шаблон используется достаточно широко разными программными платформами с целью решить те же самые задачи. Кроме этого, данный шаблон можно использовать для диагностики проблемных скриптов DaJet Script, когда непонятно что происходит.
Корневой (сервисный) скрипт обеспечивает “вечное” выполнение в цикле, перехват всех ошибок, возникающих в процессе выполнения целевого (рабочего) скрипта и его перезапуск через определённый промежуток времени.
Корневой скрипт service.djs
WHILE TRUE -- "Вечный" цикл
PRINT '[START] /scripts/call/worker.djs'
TRY
-- Выполнение целевого скрипта
EXECUTE 'file://scripts/call/worker.djs'
PRINT '[worker.djs] Выполнено успешно'
CATCH
-- Перехват непредвиденной ошибки
PRINT '[ERROR] ' + ERROR_MESSAGE()
END
PRINT '[SLEEP] 10 seconds'
SLEEP 10 -- Перезапуск скрипта через 10 секунд
END
Целевой скрипт worker.djs
-- Эмулируем полезную работу скрипта
PRINT '[worker.djs] Сделал дело'
-- Эмулируем возникновение непредвиденной ошибки
THROW '[worker.djs] Гуляй смело'
Важный нюанс для DaJet Host
При использовании DaJet Host в режиме хостинга скриптов необходимо организовать структуру каталогов и размещение корневого и целевого скриптов следующим образом:
scripts
|_ run
|_ service.djs
|_ call
|_ worker.djs
Затем в файле настроек DaJet Host config.json
указать корневой каталог для запуска скриптов /scripts/run
.
На заметку! DaJet Host выполняет все скрипты из указанного и всех вложенных в него каталогов. Подключаемые скрипты должны находиться в другом корневом каталоге!
{
"LogSize": 524288,
"LogFile": "dajet.log",
"LogPath": "",
"RootPath": "./scripts/run",
"Refresh": 10 // seconds
}
После запуска DaJet Host с выше указанными настройками:
C:\dajet-host-windows> dajet config.json
В логе dajet.log
мы можем наблюдать следующий вывод:
[2025-09-15 23:45:06] [DaJet] 3.13.0
[2025-09-15 23:45:06] [HOST] Running
[2025-09-15 23:45:06] [PATH] C:\dajet-host-windows\
[2025-09-15 23:45:06] [CONFIG] config.json
[2025-09-15 23:45:06] [LOG PATH] C:\dajet-host-windows\
[2025-09-15 23:45:06] [LOG FILE] dajet.log
[2025-09-15 23:45:06] [LOG SIZE] 524288 bytes
[2025-09-15 23:45:06] [ROOT] ./scripts/run
[2025-09-15 23:45:06] [REFRESH] 10 seconds
[2025-09-15 23:45:06] [STREAM][Assembled in 43 ms] ./scripts/run\service.djs
[2025-09-15 23:45:06] [START] /scripts/call/worker.djs
[2025-09-15 23:45:06] [worker.djs] Сделал дело
[2025-09-15 23:45:06] [worker.djs] Гуляй смело
[2025-09-15 23:45:06] [ERROR] [worker.djs] Гуляй смело
[2025-09-15 23:45:06] [SLEEP] 10 seconds
[2025-09-15 23:45:16] [START] /scripts/call/worker.djs
[2025-09-15 23:45:16] [worker.djs] Сделал дело
[2025-09-15 23:45:16] [worker.djs] Гуляй смело
[2025-09-15 23:45:16] [ERROR] [worker.djs] Гуляй смело
[2025-09-15 23:45:16] [SLEEP] 10 seconds
[2025-09-15 23:45:26] [START] /scripts/call/worker.djs
[2025-09-15 23:45:26] [worker.djs] Сделал дело
[2025-09-15 23:45:26] [worker.djs] Гуляй смело
[2025-09-15 23:45:26] [ERROR] [worker.djs] Гуляй смело
[2025-09-15 23:45:26] [SLEEP] 10 seconds
[2025-09-15 23:45:29] [HOST] Stopped