それは何ですか?
私は独自の作業キューシステムを構築しましたが、うまく動作します。ユーザーは、使用したいコア(スレッド)の数とプログラムが終了する最大時間を入力できます。キューシステムはファイルを介して通信します。具体的には、次の実行可能ファイルとファイルが存在します。
文書
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_start
jobq_serverというプロセスが実行されていることを確認し、そうでない場合は起動を試みる単純なシェルスクリプトです。
jobq_server_stop
.commands
ファイルに書き込まれます。
jobq_status
ファイルに書き込み、.commands
ファイルから読み込みます.status
。
jobq_submit
.queue ファイルに書き込まれます。
.jobq_exec
taskset
コマンドライン引数を介してジョブを渡し、出力をリダイレクトしてジョブを開始するシェルスクリプト。
.jobq_stop
.commands
ファイルに書きます
jobq_server
.commands
、およびをlog.txt
読み書きするバイナリファイルです。.queue
.status
.system_buffer
質問
現在、すべては1人のユーザー(jobq
)が使用しており、複数の人が共有しています。ファイル制限を設定したい。
jobq_submit
各ユーザーはコマンドjobq_status
だけを実行できます。したがって、たとえばasではなくasjobq_stop
としてログインする必要があります。可能であれば、テキストファイルを直接編集することを許可しないでください(、、)。johndoe
jobq
.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