それは何ですか?

それは何ですか?

それは何ですか?

私は独自の作業キューシステムを構築しましたが、うまく動作します。ユーザーは、使用したいコア(スレッド)の数とプログラムが終了する最大時間を入力できます。キューシステムはファイルを介して通信します。具体的には、次の実行可能ファイルとファイルが存在します。

文書

root jobq     0 Jun 29 10:53 .commands
root jobq 45591 Jun 29 10:52 log.txt
root jobq     0 Jun 29 10:53 .queue
root jobq    48 Jun 29 10:52 .status
root jobq    30 Jun 28 08:40 .system_buffer

実行可能ファイル

root jobq    52 Jun 22 08:36 .jobq_exec
root jobq 1100896 Jun 22 08:36 jobq_server
root jobq     271 Jun 22 08:36 jobq_server_start
root jobq  364072 Jun 22 08:36 jobq_server_stop
root jobq  363928 Jun 22 08:36 jobq_status
root jobq  368112 Jun 22 08:36 jobq_stop
root jobq  372512 Jun 22 08:36 jobq_submit

仕組み:

jobq_server_startjobq_serverというプロセスが実行されていることを確認し、そうでない場合は起動を試みる単純なシェルスクリプトです。

jobq_server_stop.commandsファイルに書き込まれます。

jobq_statusファイルに書き込み、.commandsファイルから読み込みます.status

jobq_submit.queue ファイルに書き込まれます。

.jobq_exectasksetコマンドライン引数を介してジョブを渡し、出力をリダイレクトしてジョブを開始するシェルスクリプト。

.jobq_stop.commandsファイルに書きます

jobq_server.commands、およびをlog.txt読み書きするバイナリファイルです。.queue.status.system_buffer

質問

現在、すべては1人のユーザー(jobq)が使用しており、複数の人が共有しています。ファイル制限を設定したい。

  • jobq_submit各ユーザーはコマンドjobq_statusだけを実行できます。したがって、たとえばasではなくasjobq_stopとしてログインする必要があります。可能であれば、テキストファイルを直接編集することを許可しないでください(、、)。johndoejobq.commands.queue
  • 各ジョブは、ジョブを送信したユーザーから始まります。したがって、そのユーザーが開始したジョブのみを停止できます。これは、.job_execユーザーに切り替えるためにスクリプト(以下を参照)を変更する必要があることを意味します。これはまた、サーバーがrootとしてのみ起動できることを意味すると思います。これは大丈夫です。

スクリプト情報

.jobq_exec

#!/bin/bash
cd $1
$5 1> $2 2> $3 &
echo $! > $4 2>&1

使用法(サーバーバイナリによって実行されます)

.job_exec 1:working_directory 2:out_file 3:err_file 4:buffer_file 5:'taskset -ac 1,2,3,4 command cmd_args...'

(明確にするためにパラメータ番号が追加されました)

追加情報

私はLinux Mint 20.3 Unaを実行しています。

uname -r
5.4.0-105-generic

ベストアンサー1

おすすめ記事