20180921 NEUOJ 维护日志
最近 OJ 遇到了一些蜜汁问题……终于在今天凌晨差不多解决了,胡乱记下这篇日志以备后续查阅(
nginx 日志无法写入,表现为 access.log 和 error.log 都为空:nginx 更新之后 /var/log/nginx 的蜜汁权限问题,备份 log 之后将日志文件夹清空,即可看到新日志的生成。
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 发现问题消失。
- 使用 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 的版本(