admin管理员用户登录,点击右上角管理,仔细阅读管理首页的说明。
切记:题目导入后一次只能删一题,不要导入过多你暂时用不上的题目,正确的方式是每次训练、作业,导入所需的5-10个题目,比赛作业结束后让题目成为训练题库的一部分。这样能保证题库中题号靠前的题目难度依次上升,适合后来的同学自行训练。不要贪图题目数量而忽视其质量。教练自己看不懂解法的题目,少用、慎用。
阅读两个配置文件,逐个研究选项的注释和含义。
/home/judge/etc/judge.conf 所有与判题相关的选项都在这里
/home/judge/src/web/include/db_info.inc.php 所有与Web页有关的选项都在这里
系统中“用户”“比赛”均只有编辑、禁用功能,没有删除功能,这是为了从根源上防止出现“教学事故”。
修改db_info.inc.php中的$OJ_LANG=”cn”;
服务器内存过小,超时,考虑增加php-fpm的进程数量。
sed -i ‘s/pm.max_children = 5/pm.max_children = 64/g’ $(find /etc/php -name www.conf)s
没有针对python的题库,题目都是不针对语言的,相同的题面,你用C也好用C++也好,用Java也行。
测试数据目录准备两个文本文件input.name output.name,其内容为题面指定的输入输出文件名,当他们存在时,判题系统会用他们指定的文件名来取代默认的标准输入输出。选手就可以用input.name里面写的文件名来输入数据,用output.name里面写的文件名作为输出目标。
1、在上传测试数据界面有“随机测试数据生成器”可以用元语言方式生成随机输入。构造系列.in结尾的文件。如:test01.in test02.in
2、自己编写一个标注答案,接受符合格式的输入,产生正确输出。放在测试数据目录中,命名为Main.cc
3、 登陆服务器ssh, 将这个程序编译为可执行文件Main,如g++ -o Main Main.cc
4、在测试数据目录下执行 /home/judge/src/install/makeout.sh Main
5、上述脚本将根据test01.in test02.in自动生成test01.out test02.out
右上角有管理入口,管理界面有说明,问题管理中添加问题。
添加时只能提供一组样例+一组测试数据,但保存后可以在列表最右侧找到测试数据管理入口,允许上传、生成、解压更多测试数据。
1、修改template/皮肤名/faqs.php
2、添加一个新闻,标题命名为faqs.cn则可以替换系统中的中文FAQ,其他语言雷同。
cd home/judge/src/
grep -rn "XXXX" *
sudo vim home/judge/src/web/lang/cn.php
就能找到你应该修改的文件,如果数量过多请调整搜索的关键词,缩小范围。
脚本安装的用户,可以使用 install
目录中的 bak.sh
进行备份。
sudo bash /home/judge/src/install/bak.sh
备份后的数据在 /var/backups/
目录下, 命名格式为 hustoj_%Y%m%d.tar.bz2。
迁移
首先在新服务器上做全新安装和测试,没有问题后,再迁移数据。
将你需要迁移的归档复制到目标系统的/home/judge/backup
目录下,执行下面的脚本进行恢复
cd /home/judge/backup | |
sudo bash /home/judge/src/install/restore.sh hustoj_%Y%m%d.tar.bz2 |
脚本的第一个参数为恢复的目标归档,如果没有参数则默认为按名字排序后字典序最大的归档
如何安装使用Moodle
https://zhuanlan.zhihu.com/p/103899072
脚本安装的用户,可以使用 install
目录中的 update-hustoj
进行更新升级。
sudo bash /home/judge/src/install/update-hustoj
自己不小心改坏了 web
代码,可以使用 install
目录中的 fixing.sh
进行系统修复。
sudo bash /home/judge/src/install/fixing.sh
右上角进入管理后台,用户管理,用户-权限-添加
给自己加权限sourse_browser权限
然后,查看前台,注销,重新登录。在状态页,点击提交记录中的语言名称查看源代码。
db_info.inc.php里面有
$OJ_NEED_LOGIN 和 $OJ_REGISTER
static $OJ_REGISTER=true; //允许注册新用户 |
static $OJ_REG_NEED_CONFIRM=false; //新注册用户需要审核 |
static $OJ_NEED_LOGIN=false; //需要登录才能访问 |
sudo su | |
cd /home/judge/src/install | |
echo "insert into jol.privilege values('admin','administrator','true','N');" | ./mysql.sh |
时间是指参与人员做出对应题目“花费”的时间:
即:做出题目的时刻 – 比赛开始的时刻 + 惩罚时间
惩罚时间 = 做对之前错误的提交数 * 20分钟。
普通排名按做对的题目数和“花费”的时间进行排名。
OI排名,按得分排名,在开启judge.conf中的OJ_OI_MODE=1后,题目可以按通过的比例进行记分,每题100分。如果希望数据的分值不平均分配,可以使用[权重]作为文件名结尾。如 test01[60].in / test01[60].out 可占60的分数权重,而 test02[20].in/test02[20].out可占20的权重,如果没有其他测试数据,通过后者可以得本题100分中的25分。没有标明权重的数据,默认权重为10。
"No input file specified"
编辑/etc/php/7.4/fpm/pool.d/www.conf
修改设定 rlimit_files = 1024 为一个更大的值,如65535。修改后重启php-fpm进程(sudo service php7.4-fpm restart
)生效。
judged通过UDP监听1536端口,Web端有新的提交或者重判任务时,将发送消息给judged,judged接受到消息,主动去数据库领取任务,fork出docker中的judge_client进行判题。
在SaaS模式中,judge_hub取代judged监听UDP端口,Web发送的消息包含SaaS目录下的子目录名,judge_hub根据SaaS根目录和消息,拼接出judged的主目录,并fork出judged进程去完成判题。judged完成所有数据库任务队列后,主动退出,等待下一次被judge_hub触发。
参考:JudgeHub
以下权限是手动指派:
新赋予的权限需要重新登陆获得!
以下权限是系统自动生成:
在新闻内容中编写,格式为:
[plist=题号列表]题单名[/plist]
也可以在题目列表里,勾选题目后,点击NewProblemList按钮(仅限bs3/syzoj模板使用)。在db_info.inc.php中有选项 $OJ_MENU_NEWS ,设置为true后可以通过勾选新闻的“是否展示到菜单”,在顶层导航中显示该条目。
是否显示到菜
内存限制的精度是1MB,对于本地native的编译型语言c/c++/pascal/freebasic/clang等是考察程序本身的内存申请空间; 对于虚拟机和脚本语言,则包含了虚拟机本身或解释器本身的内存消耗。
一般情况下,单个测试文件大小建议不超过10M,测试文件总量10组(.in + .out)。
ren *.ans *.out
。[]
来标注分数。如 test01[20].in / test01[20].out
将视为分数是20分,未标注的文件按10分计分,系统最终根据所有文件的总分和运行得分,记录提交的通过率pass_rate放入solution表,用于前台显示。//static $OJ_EXAM_CONTEST_ID=1000; // 启用考试状态,填写考试比赛ID | |
//static $OJ_ON_SITE_CONTEST_ID=1000; //启用现场赛状态,填写现场赛比赛ID |
已经更新默认C++标准为C++14。可以检查,judge.conf 中是否有 OJ_CPP_STD=-std=c++14
即可。
根据 std::gets - cppreference.com , gets函数已经被移除。 可以使用#define gets(S) fgets(S,sizeof(S),stdin)
作为兼容性宏替换。
如果你的系统主要为Python服务,可以修改/home/judge/etc/judge.conf
设 OJ_PYTHON_FREE=1
为了增加安全性,请在/home/judge/src/install
目录运行sudo bash docker.sh
,然后修改/home/judge/etc/judge.conf
设定 OJ_USE_DOCKER=1
这样设定后,可以提高Python的判题速度,并提供额外的安全防护。 推荐使用Ubuntu20.04作为基础系统。
可以,设置db_info.inc.php中的选项,
static $OJ_REGISTER=true; //true允许注册新用户,false禁止注册 | |
static $OJ_REG_NEED_CONFIRM=true; //true新注册用户需要审核,false无需审核直接登陆 |
关闭注册后,管理员可以在后台“比赛队账户生成器”,生成指定数量的账户用于分配。 http://xxxx.xxxxx/admin/team_generate.php
修改db_info.inc.php设置
static $OJ_MATHJAX=true; // 激活mathjax
需要用户能够正常访问互联网,内网用户需要自行部署mathjax内网镜像,并修改template/bs3/problem.php中相关路径。
修改/home/judge/etc/judge.conf,设置
OJ_SIM_ENABLE=1
修改/home/judge/src/web/include/db_info.inc.php,设置
$OJ_SIM=true;
sudo pkill -9 judged | |
sudo judged |
sudo find /home/judge -name "XXXXX"
数据库账号密码存放在两个配置文件中:
/home/judge/etc/judge.conf | |
/home/judge/src/web/include/db_info.inc.php |
新版本中,快速登陆mysql的脚本在install目录里,名字为mysql.sh 使用方法
sudo bash /home/judge/src/install/mysql.sh
也可以安装phpmyadmin:
sudo apt-get -y install phpmyadmin
第一个对话框询问关于Configure database for phpmyadmin with dbconfig-common
用Tab键选到No,回车。
在后续对话框中,不要选择任何一个(apache/lighthttpd都不选),用Tab键选到最下面的OK
安装完成后,执行
sudo ln -s /usr/share/phpmyadmin /home/judge/src/web/pma
然后就可以在OJ的网页端,用http://IP或域名/pma/ 来访问phpmyadmin了
数据库帐号密码,查看前述配置文件。
利用ssh的端口转发机制,把Windows本地的3306端口映射到远程的3306端口上,就可以用前面一个问题中查到的账号密码去连接数据库了。对于Navicat参考使用Navicat进行ssh通道连接MySQL数据库_温暖如春520的博客-CSDN博客
注意常规标签里写的是配置文件里查到的数据库的账号密码,SSH标签里写的是连接SSH用的账号密码。如果你的ssh服务端口不是22,记得要修改成正确的端口。
对于putty,参考下图:
1、先用谷歌浏览器直接打开xml文件,看是否有语法错误,如果有,用文本编辑器修订提示的行号。
2、如果超过100M,可以先用EasyFPSViewer拆分成多个小文件,然后再导入。
3、对于HUSTOJ,可以先压缩为zip再上传导入
4、修改/etc/php/7.2/fpm/php.ini, 提高post_max_size、upload_max_filesize 、memory_limit、max_execution_time 的值。修改后执行sudo service php7.2-fpm restart生效。
修改/home/judge/etc/judge.conf
OJ_CPU_COMPENSATION=1.0
增加这个值可以降低CPU的评测速度,安装脚本根据CPU的bogomips值来初始化。 最高不超过100,设为100可以将原先1ms的测试数据计成100ms。
这是由ACM的规则决定的,因为做错有罚时,如果比赛题目在练习中同时可用,则会导致选手可以先在练习中AC,然后再去比赛中提交,从而绕过罚时。另外,比赛题目如果在比赛还没开始的时候,就在练习中出现,则会有漏题的嫌疑,类似某网络原题赛。
当一个题目在作业里被隐藏的时候,如果有老师希望学生可以做这些题目,可以布置自己的作业,将题目加进去,提供给学生做。
一个题目可以同时出现在不同的作业、比赛里。
练习中出现的题目必须满足:
0、已经被管理员设置为可用
1、不在任何未结束的公开作业、比赛中
2、不在任何私有的作业、比赛中
3、题号大于等于1000
这取决于买的阿里云还是校园网服务器,或者虚拟机: 阿里云直接用阿里提供的公网ip访问,也可以添加域名解析后用域名访问。 校园网,用学校提供的内网ip或二级域名访问。 虚拟机,百度“【虚拟机的名字如virtualbox或vmware】+端口映射” ,把80端口转进去,然后用物理机的ip地址访问。
在judge_client.cc头部增加宏定义 IGNORE_ESOL 或者修改 Makefile 增加 -DIGNORE_ESOL 参数。
点击Configuration
加好题目后在题目列表找TestData,点击上传。 主文件名一样的*.in *.out,如test1.in test1.out
如果您使用的是ie6浏览器,请禁用服务器上的deflate模块,在ubuntu下的命令是
sudo rm /etc/apache2/mods-enabled/deflate.* sudo /etc/init.d/apache2 restart
判题程序judged需要用root帐号启动,请重启服务器或手动执行sudo judged。如果无效,请检查/home/judge/etc/judge.conf中的数据库账号配置,参考[Configuration],修正后再次重启服务器或执行sudo pkill -9 judged等待一会儿再执行sudo judged
您需要修改测试数据目录,给予php-fpm操作数据目录的权限。Ubuntu下php-fpm运行的用户身份是www-data
chgrp www-data -R /home/judge/data | |
chmod g+rw -R /home/judge/data | |
题目默认为删除状态,只有管理员能访问,当管理员确认题目没有问题后,可以点击ProblemList中红色的Reserved,切换为绿色的Available启用题目。
目前只支持sun原版jdk和openjdk,其他jdk暂不能保证支持。如果你用的是64位系统,你可能需要自己调整一下源代码。请联系我。
请给自己增加source_browser权限。issue1
以管理员身份登录,点击Admin/管理进入后台。
进入后台,点击左侧NewProblem。
添加题目时,可以在test input/test output添加一组测试数据,大规模的数据(10kb+)和更多的数据,可以在添加完题目后,通过ftp/sftp,上传到题目对应目录,通常是 /home/judge/data/题号。命名规则是输入数据以.in结尾,输出数据以.out结尾,主文件名相同。
后台中点击ProblemList,找到需要编辑的题目,点击Edit。编辑时不能修改测试数据,测试数据请使用ftp工具修改。
题目添加后,默认是停用状态,以防比赛提前漏题,后台中点击ProblemList,找到题目,点击Reserved 切换为Available启用题目,或者组织比赛,比赛中的题目将自动启用。
在题目列表ProblemList中选择使用的题目,在PID一栏打钩,点击CheckToNewContest按钮,进入到比赛添加页面,输入比赛名称,设定比赛时间,语言类型,访问权限提交即可。 | |
也可以使用管理菜单中的NewContest,需要手动输入题目编号,用英文逗号分隔。 |
点击比赛列表ContestList,选择Edit或Delete。
点击SetMessage。修改无效请检查admin/msg.txt是否对php账号(www-data)可写
点击ChangPassWD
点击Rejudge,输入题号或运行编号。
Addprivilege/添加权限, administrator为管理员,source_browser为代码审查,contest_creator为比赛组织者。 通常给使用系统的老师分配代码审查和比赛组织者权限即可。
使用ImportProblem,上传FPS文件。 | |
使用ExportProblem,输入起始编号,结束编号,或题号列表,如果输入了列表,起始结束将不起作用。 |
系统升级中,有对数据库的修改,这些修改不能通过SVN实现自动更新,如果发现升级web/core代码后系统报错,可以执行update database操作,进行数据库升级。因为脚本中有测试代码,所以重复执行不会造成影响。
部署在Centos7系统中无法正常评测,如何解决?
由于hoj使用的判题机中的安全沙盒使用环境的特殊性,如果想在centos7系统中正常运行hoj-judgeserver服务,需要开启 user 命名空间来使用。
echo user.max_user_namespaces=10000 >> /etc/sysctl.d/98-userns.conf
docker restart hoj-judgeserver
重新启动hoj-judgeserver的docker容器即可正常评测。