我想在 Linux 系统上为学生创建一个自动测试/评分脚本,以便:
- 任何学生用户都可以随时启动脚本。
- 单独的脚本(具有 root 权限)使用非学生可访问的单元测试等将学生代码复制到非学生可访问的文件空间。
- 用户会收到评分脚本生成的文本文件形式的有限反馈。
简而言之,我希望创建类似于编程竞赛提交系统的东西,但允许更丰富的反馈,而无需透露所有教师单元测试。
我认为一个启动脚本和一个 root 权限 cron 脚本之间的假脱机行为可能是合理的。是否有任何模型/示例可以说明如何最好地构建用户启动的脚本和单独的根启动的脚本之间的通信以实现此类目的?
最佳答案
有很多选择。
我在第一行提到的事情:
- 不要使用su;使用sudo;造成这种情况的原因有很多,最主要的原因是,要使用 su,您需要您想要成为的用户的密码,而使用 sudo 则不需要;
- 脚本不能是 suid,您必须使用二进制文件或只是使用
sudo
启动的普通脚本(当然,学生必须具有允许他们使用脚本的sudoers
条目); - Cron 并不像您理论上需要的那么快; cron 每分钟运行一次任务;请考虑使用inotify;
- 要在系统组件之间进行通信,您需要能够实时使用react的东西;有许多开源组件/库/框架可以帮助您,但我建议您看看 ZeroMQ 和 Redis;
- 脚本执行/测试的结果可以写入文件系统(我认为这会更好),也可以写入 DBMS。
关于Linux非su脚本间接触发su脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099626/