-1

次のような Linux システムで、学生向けの自動テスト/採点スクリプトを作成したいと考えています。

  • 学生ユーザーはいつでもスクリプトを開始できます。
  • 別のスクリプト (root 権限を使用) は、学生がアクセスできない単体テストなどを使用して、学生のコードを学生がアクセスできないファイル スペースにコピーします。
  • ユーザーは、採点スクリプトによって生成されたテキスト ファイルの形式で限定的なフィードバックを受け取ります。

要するに、私はプログラミング コンテストの提出システムに似たものを作成しようとしていますが、すべての教師の単体テストを明らかにすることなく、より豊富なフィードバックを可能にします。

1 つの開始スクリプトと 1 つの root 権限 cron スクリプトの間のスプーリング動作が適切であると想像できます。そのような目的で、ユーザーが開始したスクリプトと別のルートが開始したスクリプトとの間の通信を最適に構築する方法のモデル/例はありますか?

4

2 に答える 2

0

多くのオプションがあります。

最初の行で言及すること:

  • suを使用しないでください。sudoを使用します。これにはいくつかの理由があり、主な理由は、suを使用するには、なりたいユーザーのパスワードが必要であり、sudoでは必要ないためです。
  • スクリプトをsuidにすることはできません。バイナリまたは使用を開始する通常のスクリプトを使用するsudo必要があります (もちろん、学生sudoersはスクリプトを使用できるエントリを持っている必要があります)。
  • Cronは、理論的に必要なほど高速ではありません。cron は毎分タスクを実行します。inotifyの使用を検討してください。
  • システムのコンポーネント間で通信するには、リアルタイムで反応するものが必要です。役立つオープンソース コンポーネント/ライブラリ/フレームワークがたくさんありますが、 ZeroMQRedisを確認することをお勧めします。
  • スクリプトの実行/テストの結果は、ファイル システム (そのほうがよいと思います) または DBMS に書き込むことができます。
于 2014-01-13T19:28:32.047 に答える
0

シェルスクリプトに固執したい場合、プロセス間の通信のために私が提案する方法は、ルートスクリプトに名前付きパイプの入力を継続的にチェックさせ (つまり、各 eof の後にパイプを開き続ける)、さまざまなテストが必要なあらゆるものを通じて各入力を送信することです。終わり。入力の一部を「リターン アドレス」 (結果の送信先) にします。

これにより、特権スペースの制御を学生に公開することなく、特権スペースでテストを実行できるようになります。学生は sudo を必要とせず、ライブラリをプルする必要もありません。学生にコードを非特権スクリプトにパイプしてもらい、戻りアドレスと必要なその他のマークアップを追加し、それを名前付きパイプに渡します。

于 2014-01-13T21:59:21.243 に答える