Serve.cfg:global:compile dir
Навигация: Главная страница/Система 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