OJ搭建好了後,我們要熟悉一下OJ項目下的文件及文件夾。 首先,安裝好的OJ是在目錄var/www/html下。 html下的php文件 這些php文件都是些主要跳轉頁面。 admin文件夾 登錄管理員賬號後管理的管理界面 bootstrap文件夾 css樣式和圖片,如果要修改某些頁面的小地方請到w ...
OJ搭建好了後,我們要熟悉一下OJ項目下的文件及文件夾。
首先,安裝好的OJ是在目錄var/www/html下。
html下的php文件
這些php文件都是些主要跳轉頁面。
admin文件夾
登錄管理員賬號後管理的管理界面
bootstrap文件夾
css樣式和圖片,如果要修改某些頁面的小地方請到www\html\bootstrap\css\bootstrap裡面去找到對應的css修改即可。如果要大方面的修改,建議還是自己寫個css文件要好。
include文件夾
公共的配置文件所在文件夾(學過php的應該都會知道的吧- -);
這裡主要是有一個web使用的配置文件db_info.inc.php
主要內容如下:
static $DB_HOST="localhost"; 資料庫的伺服器地址 static $DB_NAME="jol"; 資料庫名 static $DB_USER="root"; 資料庫用戶名 static $DB_PASS="root"; 資料庫密碼 // connect db static $OJ_NAME="HUSTOJ"; OJ的名字,將取代頁面標題等位置HUSTOJ字樣。 static $OJ_HOME="./"; OJ的首頁地址 static $OJ_ADMIN="root@localhost"; 管理員email static $OJ_DATA="/home/judge/data"; 測試數據所在目錄,實際位置。 static $OJ_BBS="discuss";//"bbs" 論壇的形式,discuss為自帶的簡單論壇,bbs為外掛論壇,參考bbs.php代碼。 static $OJ_ONLINE=false; 是否使用線上監控,需要消耗一定的記憶體和計算,因此如果併發大建議關閉 static $OJ_LANG="cn"; 預設的語言,中文為cn static $OJ_SIM=true; 是否顯示相似度檢測的結果。 static $OJ_DICT=false; 是否啟用線上英字典 static $OJ_LANGMASK=1008; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language 用掩碼表示的OJ接受的提交語言,可以被比賽設定覆蓋。 static $OJ_EDITE_AREA=true;// 是否啟用高亮語法顯示的提交界面,可以線上編程,無須IDE。 static $OJ_AUTO_SHARE=false;//true: 自動分享代碼,啟用的話,做出一道題就可以在該題的Status中看其他人的答案。 static $OJ_CSS="hoj.css"; 預設的css,可以選擇dark.css和gcode.css,具有有限的界面制定效果。 static $OJ_SAE=false; //是否是在新浪的雲平臺運行web部分 static $OJ_VCODE=true; 是否啟用圖形登錄、註冊驗證碼。 static $OJ_APPENDCODE=false; 是否啟用自動添加代碼,啟用的話,提交時會參考$OJ_DATA對應目錄里是否有append.c一類的文件,有的話會把其中代碼附加到對應語言的答案之後,巧妙使用可以指定main函數而要求學生編寫main部分調用的函數。 static $OJ_MEMCACHE=false;是否使用memcache作為頁面緩存,如果不啟用則用/cache目錄 static $OJ_MEMSERVER="127.0.0.1"; memcached的伺服器地址 static $OJ_MEMPORT=11211; memcached的埠 static $OJ_RANK_LOCK_PERCENT=0; //比賽封榜時間的比率,如5小時比賽設為0.2則最後1小時封榜。 static $OJ_SHOW_DIFF=false; //顯示WrongAnswer時的對比
lang文件夾
語言設置文件夾
template文件夾
OJ主題文件夾,裡面的一個文件夾對應的一個不同的風格主題。預設使用的是bs主題。
這裡另外要提一下的就是hustoj還有一個core的配置文件judge.conf,預設位置/home/judge/etc
註意core沒有識別引號和註釋的能力,所以不要自行增加任何引號或註釋,否則可能影響judged啟動
OJ_HOST_NAME=127.0.0.1 如果用mysql連接讀取資料庫,資料庫的主機地址 OJ_USER_NAME=root 資料庫帳號 OJ_PASSWORD=root 資料庫密碼 OJ_DB_NAME=jol 資料庫名稱 OJ_PORT_NUMBER=3306 資料庫埠 OJ_RUNNING=4 judged會啟動judge_client判題,這裡規定最多同時運行幾個judge_client OJ_SLEEP_TIME=5 judged通過輪詢資料庫發現新任務,輪詢間隔的休息時間,單位秒 OJ_TOTAL=1 老式併發處理中總的judged數量 OJ_MOD=0 老式併發處理中,本judged負責處理solution_id按照TOTAL取模後餘數為幾的任務。 OJ_JAVA_TIME_BONUS=2 Java等虛擬機語言獲得的額外運行時間。 OJ_JAVA_MEMORY_BONUS=512 Java等虛擬機語言獲得的額外記憶體。 OJ_SIM_ENABLE=0 是否使用sim進行代碼相似度的檢測 OJ_HTTP_JUDGE=0 是否使用HTTP方式連接資料庫,如果啟用,則前面的HOST_NAME等設置忽略。 OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline 使用HTTP方式連接資料庫的基礎地址,就是OJ的首頁地址。 OJ_HTTP_USERNAME=admin 使用HTTP方式所用的用戶帳號(HTTP_JUDGE許可權),該帳號登錄時不能啟用VCODE圖形驗證碼,但可以登錄成功後啟用。 OJ_HTTP_PASSWORD=admin 密碼 OJ_OI_MODE=0 是否啟用OI模式,即無論是否出錯都繼續判剩餘的數據,在ACM比賽中一旦出錯就停止運行。 OJ_SHM_RUN=0 是否使用/dev/shm的共用記憶體虛擬磁碟來運行答案,如果啟用能提高判題速度,但需要較多記憶體。 OJ_USE_MAX_TIME=1 是否使用所有測試數據中最大的運行時間作為最後運行時間,如果不啟用則以所有測試數據的總時間作為超時判斷依據。 OJ_LANG_SET=0,1,2,3,4 #判哪些語言的題目
如果是判題的時候有錯就得來看這裡。我同學在和我合作的時候就更改了資料庫用戶,我還花了5大洋進了hustoj作者大神的群。別人一句話就解決了O_o
若無伺服器且訪問過多的可以建立分散式判題系統
資料庫中
grant all privileges on jol.* to 'judge'@'%' identified by 'judge_pass' with grant option;
檢查/etc/mysql/my.cnf 確保
bind-address = 0.0.0.0
高負載的情況下最好設置更多的連接數。
max_connections = 512
其次,配置各web程式連接到資料庫。
修改include/db_info.inc.php
static $DB_HOST="資料庫伺服器ip"; static $DB_NAME="jol"; static $DB_USER="judge"; static $DB_PASS="judge_pass";
第三,配置各判題程式連接到資料庫,分配任務。
OJ_HOST_NAME=資料庫伺服器ip OJ_USER_NAME=judge OJ_PASSWORD=judge_pass OJ_DB_NAME=jol ... OJ_TOTAL=判題機總數 OJ_MOD=本機編號,從0開始 ...
兩台機器都裝
sudo apt-get install ssh
第四,複製測試數據目錄到各判題機。
從主機向判題機複製
scp -r /home/judge/data root@判題機ip:/home/judge/
或用同步命令。
rsync -vzrtopg --progress --delete /home/judge/data root@判題機ip:/home/judge/
判題機從主機複製
scp -r root@主機ip:/home/judge/data /home/judge/
或用同步命令。
rsync -vzrtopg --progress --delete root@主機ip:/home/judge/data /home/judge/
重啟mysql
sudo /etc/init.d/mysql restart
重啟Apache
sudo /etc/init.d/apache2 restart
重啟judge
sudo pkill judged&&sudo judged