参考、借鉴连接:https://blog.csdn.net/k_young1997/article/details/81629818
校内ACM即将开展,原本咱们的主服务器是可以容纳150支队伍同时提交代码进行判断。只因今年奖品过于诱人,致使今年参赛队伍在170到180支队伍之间,大大超过咱们估计值。这对主服务器也是一个不晓得考研。为了分担主服务器的压力与防止比胜过程中出现意外致使比赛不得不停止,咱们主办方打算采用分布式系统,再搭几个OJ判断机用来分担主服务器的压力。
由于在网络上的教程与我真实的系统环境有点出入,中间出现各类问题, 重装系统好几回。因此写一篇博客记录下本身心路历程。
本文介绍了我在搭建中的注意事项。在安装前期会提示设置数据库密码,所有设置为root。
#####1、下面是我第一次安装成功的过程
一、先将用户切换为root用户php
$ sudo su
密码:
二、先cd到home目录下,再将下面的命令粘贴到终端,下载的install-ubuntu16+.sh脚本就在home目录下mysql
# cd # wget https://raw.githubusercontent.com/zhblue/hustoj/master/trunk/install/install-ubuntu16+.sh
三、先安装下前置软件,避免后面运行脚本时出现各类奇奇怪怪的问题nginx
# apt-get update # apt-get install mysql-server mysql-client //在执行完这条命令后会提示设置mysql的密码,必定要设置为root,否则会影响后面脚本的运行 # apt-get install nginx //这个很容易出错,在安装完后运行下排错命令查看nginx安装是否出错 # nginx -t #apt-get install php7.0
下面是运行nginx -t排错命令以后的结果,若是出现如下提示就说明没问题。git
root@max-studio3:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
使用如下命令查看nginx是否工做github
# service nginx status
若是出现绿色的 active runing 就表明这个组件成功运行
先将mysql、nginx、php7.0三个前置软件安装好以后,后面能够避免大部分问题,剩下的问题大概就是配置文件没配置对什么的。
四、接下来就是运行脚本了,不少博客不建议直接运行脚本进行安装,由于中间路径、文件、配置等等会出现各类各类问题。在这里我也建议打开脚本文件一条命令一条命令的去执行,出现问题立马排错。
接下来就是我手动执行命令踩过的坑
4.一、在home路径下打开 install-ubuntu16+.sh脚本web
# cd $HOME # gedit install-ubuntu16+.sh
4.二、当执行到第五行代码时,这时的路径就会发生改变sql
# cd /home/judge/
注:此后的命令不少都是在此路径下运行的
4.三、执行到第一个if语句以前数据库
if grep "OJ_SHM_RUN=0" etc/judge.conf ; then mkdir run0 run1 run2 run3 chown judge run0 run1 run2 run3 fi
先去/home/judge/etc 打开judge.conf配置文件 把 OJ_SHM_RUN=1 改成OJ_SHM_RUN=0
而后再退回到 /home/judge目录,接着再执行如下命令,就可以成功建立run0 run1 run2 run3 这四个文件夹ubuntu
if grep "OJ_SHM _RUN=0" etc/judge.conf ; then mkdir run0 run1 run2 run3 chown judge run0 run1 run2 run3 fi
4.四、 执行如下命令时,必定要在 /home/judge的路径下执行;而且接下来的代码都要在这个路径下执行浏览器
sed -i "s/OJ_USER_NAME=root/OJ_USER_NAME=$USER/g" etc/judge.conf sed -i "s/OJ_PASSWORD=root/OJ_PASSWORD=$PASSWORD/g" etc/judge.conf sed -i "s/OJ_COMPILE_CHROOT=1/OJ_COMPILE_CHROOT=0/g" etc/judge.conf sed -i "s/OJ_RUNNING=1/OJ_RUNNING=$CPU/g" etc/judge.conf
4.五、当执行到如下命令时有可能会出错
mysql -h localhost -u$USER -p$PASSWORD < src/install/db.sql echo "insert into jol.privilege values('admin','administrator','N');"|mysql -h localhost -u$USER -p$PASSWORD
报错信息为:
mysql:[Warning] Using a password on the command line interface can be insecure.
解决办法:将上述命令改成:
mysql -h localhost -u root -p < src/install/db.sql echo "insert into jol.privilege values('admin','administrator','N');"|mysql -h localhost -u root -p
4.六、当执行到下面的命令时
/etc/init.d/nginx restart
出现如下信息就证实nginx已成功配置并重启服务
[ OK ] Restarting nginx ( via systemctl ): nginx.service.
4.七、执行这条命令时
/etc/init.d/php7.0-fpm restart
出现如下信息证实php已成功配置并重启服务
[ OK ] Restarting php7.0 - fpm ( via systemctl ): php7.0 - fpm.service
4.八、执行如下命令时
cd src/core chmod +x ./make.sh ./make.sh //特别是这一句
会报错,缘由是在make.sh脚本中
rm /usr/bin/sim_rb /usr/bin/sim_sh //这句会报错 因文件不存在没法删除 ln -s /usr/bin/sim_c /usr/bin/sim_cc //这句会报错 由于文件已存在没法链接
这两个错误能够不用理会,由于那两个文件原本就须要删除的,第二句连接既然已经存在了,也就不用再去连了。
4.九、当执行如下命令时,其路径要在 /home/judge/src/core 下执行
if grep "/usr/bin/judged" /etc/rc.local ; then echo "auto start judged added!" else sed -i "s/exit 0//g" /etc/rc.local echo "/usr/bin/judged" >> /etc/rc.local echo "exit 0" >> /etc/rc.local fi
4.十、 当执行如下命令时,其路径要在 /var/spool/cron/crontabs 下执行
if grep "bak.sh" /var/spool/cron/crontabs/root ; then echo "auto backup added!" else echo "1 0 * * * /home/judge/src/install/bak.sh" >> /var/spool/cron/crontabs/root fi
最后几条命令依然在 /var/spool/cron/crontabs 此路径下执行。全部命令执行完毕后,OJ已经搭好了。在浏览器输入http://127.0.0.1 回路地址测试。能顺利打开本地网页就证实 OJ已经搭建完毕。
附录:OJ安装后四个重要配置文件的位置
/home/judge/etc/judge.conf /home/judge/src/web/include/db_info.inc.php /etc/php/7.0/fpm/php.ini /etc/nginx/sites-enabled/default