20180921 NEUOJ 维护日志

Bittersweet2017-9-20
本文最后更新于 729 天前(2017-9-20),其中的信息可能已经有所发展或者不再适用于现阶段。
本文全长 493 字,全部读完大约需要 2 分钟。

最近 OJ 遇到了一些蜜汁问题……终于在今天凌晨差不多解决了,胡乱记下这篇日志以备后续查阅(

  1. nginx 日志无法写入,表现为 access.log 和 error.log 都为空:nginx 更新之后 /var/log/nginx 的蜜汁权限问题,备份 log 之后将日志文件夹清空,即可看到新日志的生成。

  2. judgehost 在 compile 阶段出现问题,观察 judgings 里面的 compile.out 发现错误信息如下:

Compiling failed with exitcode 255, compiler output:
/opt/domjudge/judgehost/bin/runguard: invalid groupname or ID specified: `domjudge-run'
Try `/opt/domjudge/judgehost/bin/runguard –help' for more information.

根据提示信息,尝试手动运行 runguard -u domjudge-run 也得到了同样的错误提示。无奈只好尝试 userdel 之后重新 useradd,之后再次运行 judgehost 发现问题消失。

  1. 使用 supervisor 运行 judgehost 的时候,judgehost 进程总是在不断重启。观察 log 发现如下错误提示:

[Sep 20 18:22:25] judgedaemon[21946]: executing chroot script: 'chroot-startstop.sh start'
[Sep 20 18:22:26] judgedaemon[21946]: error: Error retrieving API data. API gave us: "MTAKNDUxMiA4NjY5Cjk2IDQyNDQKOTYgMTMxN……

经过分析,这应该是 web 服务器返回测试样例文件的 API 出现了问题,观察 nginx 的 log,发现如下错误提示:

nginx open() "/var/lib/nginx/tmp/fastcgi/2/98/0000012982" failed (13: Permission denied) while reading upstream

这应该也是更新之后的蜜汁权限问题,运行 chown -R /var/lib/nginx 之后问题解决。回想起之前曾经出现过的样例文件无法上传下载的情况,很有可能也是这个问题导致的,只不过当时 log 还没有修好,没有排查出来……

大概就是这些坑了233333,越来越感觉 NEUOJ 急需重构,准备着手用 Golang 和 Vue 来做前后端分离了……然后学一下 GraphQL,设计一套合理的 API,再适配上 domjudge 6.0 的 API,当然如果有时间能把 Docker Judge 搞好那就太棒啦pwp

哦对另外补充一下,domjudge 6.0 和 之前用的 5.1.1 的 API 貌似有不兼容的地方哦,在排查错误的时候一定要检查 domjudge 的版本(

除特殊说明以外,本网站文章采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。