Serve.cfg:global:compile dir

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Конфигурационные файлы/serve.cfg/Глобальные конфигурационные параметры/compile_dir

Имя переменной: compile_dir
Содержится в: global
Используется: serve, compile
Тип содержимого: путь к каталогу
Может отсутствовать: да
Значение по умолчанию: compile
Может повторяться: нет

Описание. Данная переменная задаёт каталоги обмена между программами serve и compile. Полный путь к этому каталогу определяется по следующим правилам:

  • Если значение переменной compile_dir не задано, используется значение compile.
  • Если значение переменной compile_dir начинается с символа ’/’, то есть значение переменной задаёт полный абсолютный путь к каталогу скриптов, этот путь используется без изменений.
  • Если значение переменной compile_dir не начинается с символа ’/’, полный путь к каталогу скриптов образуется конкатенацией значения переменной var_dir и значения переменной compile_dir.


Каталог обмена содержит в себе несколько подкаталогов, назначение которых описывается ниже.

  • Подкаталог queue используется для передачи информации от программы serve к программе compile. Программа serve помещает в этот каталог небольшие файлы, содержащие служебную информацию о программе, которую необходимо скомпилировать

(так называемый «пакет задания компиляции»). Программа compile периодически просматривает этот каталог и при появлении в нём новых пакетов задания компиляции выполняет их. Этот каталог может использоваться совместно несколькими программами serve, обслуживающими разные турниры, и несколькими программами compile, например, работающими на разных компьютерах в сети. Этот каталог имеет специальную структуру, чтобы предотвратить синхронизационные ошибки при одновременном доступе нескольких программ.

  • Подкаталог src используется для передачи информации от программы serve к программе compile. Программа serve помещает в этот каталог файл исходного текста программы, которую необходимо скомпилировать. Файл с текстом программы имеет то же самое имя, что и пакет задания компиляции для этой программы. Программа compile считывает файл исходного текста после файла пакета задания компиляции. Этот каталог может использоваться совместно несколькими программами serve, обслуживающими разные турниры, и несколькими программами compile. Синхронизация доступа поддерживается в каталоге queue, поэтому никакой дополнительной синхронизации в каталоге src не требуется.
  • Подкаталог status используется для передачи информации от программы compile к программе serve. В этот каталог программа compile помещает небольшой файл с информацией о результате компиляции (так называемый «пакет результата компиляции»). Программа serve периодически просматривает данный каталог и при появлении в нём новых файлов обновляет своё внутреннее состояние. Поскольку каталог может использоваться одновременно несколькими программами compile и одной программой serve,он имеет специальную структуру для предотвращения синхронизационных ошибок.
  • Подкаталог report используется для передачи информации от программы compile к программе serve. В этот каталог программа compile помещает список ошибок, выданных при неуспешной компиляции, или скомпилированный исполняемый файл в случае успешной компиляции. Каталог может использоваться одновременно несколькими программами compile и одной программой serve, но синхронизация доступа ведётся с помощью каталога status, поэтому никакой дополнительной синхронизации в каталоге report не требуется.
  • Символическая ссылка <номер>, где <номер> — четырёхзначный идентификатор турнира. Эта символическая ссылка создаётся в каталоге, задаваемом переменной compile_dir, программы compile, и указывает на каталог, задаваемый переменной compile_dir, программы serve. Если эти каталоги совпадают, символическая ссылка указывает на каталог, в котором она находится. С помощью этой символической ссылки программа compile может обслуживать одновременно несколько турниров, записывая

результаты компиляции в каталог обмена только соответствующего турнира.

Пример. С помощью задания каталога обмена можно добиться того, что несколько одновременно работающих серверов турнира будут использовать одну программу компиляции compile. Для этого создаётся отдельный каталог для программы compile, например /var/ejudge/compile. Этот каталог указывается в качестве коревого в конфигурационном файле программы compile c помощью строки

root_dir = /var/ejudge/compile

Программа compile запускается в каталоге /var/ejudge/compile. Теперь во всех конфигурационных файлах серверов турниров для использования этой программы компиляции достаточно установить переменную compile_dir в следующее значение:

compile_dir = /var/ejudge/compile/var/compile