Skip to the content.

Назад

Сервисный скрипт с перезапуском

Иногда требуется, чтобы некоторый скрипт выполнялся 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